Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Dateien mit Unterstruktur verschieben

Frage Entwicklung Batch & Shell

Mitglied: photographix

photographix (Level 1) - Jetzt verbinden

09.06.2010 um 13:58 Uhr, 4166 Aufrufe, 15 Kommentare

Hallo Leute,

folgendes Problem habe ich aktuell:

Wir besitzen eine großes Storrage mit ca. 7TB an Dateien.

Von dort sollen jetzt Dateien auf ein anderes (billiges) Storrage verschoben werden.
Dateien die in Bestimmten Ordnern liegen.
Das Konzept sieht später eine "automatische Reinigung" vor.

Glücklicher weise haben wir die Ordner schon passend benannt:

E:\Firma\Dokumente \2103\2010\2010-01\2010-01-15 \Subordner \Subordner\*.*

Ich benötige nun eine "Logik" die es mir ermöglicht entweder ab Ordner 2010 oder 2010-01 oder 2010-01-15 alles zu verschieben.

Mit Robocopy kann ich keine Ordnerliste verarbeiten.
Zumindest habe ich es nur geschafft Ordner wegzulassen aber nicht ausschließlich nur bestimmte Ordner einer Struktur zu verschieben...

Mit folgendem Code von Bastla habe ich mich schon beschäftigt

01.
@echo off & setlocal 
02.
set "Liste=D:\Liste.txt" 
03.
set "Archiv=D:\Verschobene Dateien" 
04.
set "Fehler=D:\Errors.txt" 
05.
 
06.
if exist "%Fehler%" del "%Fehler%" 
07.
for /f "usebackq delims=" %%i in ("%Liste%") do md "%Archiv%%%~pi" 2>nul & move "%%i" "%Archiv%%%~pnxi" || echo %%i>>"%Fehler%"
dieser funktioniert sehr gut wenn ich alle Dateien in allen Ordnern erfasse.
eine txt Datei über 7TB Inhalt mit jeder Datei zu erstellen ist aber sehr aufwändig.

Leider habe ich momentan keinen Ansatz mehr da ich mich mit Schleifen und Batch nicht auskenne.

PS: im Totalcommander kann ich zwar nach Ordner "Pattern" filtern - dort kann ich aber nicht die gesamte Struktur mit dem Ordner kopieren sondern immer nur den Ordner...

Vielleicht hat ja jemand eine Idee.

LG
Mitglied: bastla
09.06.2010 um 14:07 Uhr
Hallo photografix!

Wie wäre es mit einem
subst X: "E:\Firma\Dokumente\2103\2010"
Grüße
bastla
Bitte warten ..
Mitglied: SamvanRatt
09.06.2010 um 14:12 Uhr
Hi
wie wäre es mit regulären Ausdrücken (für Totalcommander)?
Robocopy kommt damit auch sicher klar, sofern du placeholder nutzt wie
E:\Firma\Dokumente \2103\????\????-??\????-??-???\
Deine Ordnung kennst du natürlich am besten. Da du wohl an Windows gefesselt bist (mit SAMFS kennst du solche Probleme nicht da du Dateien nach mehrere Kriterein automatisch auf andere (billiger+langsamere) Bereiche verschoben wird ohne dein Zutun; du hast dann nur noch ein System welches alte(=migrierte) Daten einfach langsamer gibt als topaktuelle.
Gruß
Sam
Bitte warten ..
Mitglied: photographix
09.06.2010 um 14:13 Uhr
Hmm..

wäre eine Idee.
Da ich aber den Ordner 2103 nicht genau kenne - könne auch 2345 oder 7784 oder 4582 heißen wird das schwierig.
Von diesen "Überordnern" habe ich ca 500 Stück.
Bitte warten ..
Mitglied: photographix
09.06.2010 um 14:16 Uhr
Hallo SamvanRatt,

das SAMFS klingt sehr cool.
Mal sehen ob ich mich im Sommerloch damit beschäftigen kann.
Bitte warten ..
Mitglied: bastla
09.06.2010 um 14:21 Uhr
Hallo photographix!

Dann (ungetestet) etwa so:
01.
@echo off & setlocal 
02.
set "Quelle=E:\Firma\Dokumente" 
03.
set "Archiv=D:\Verschobene Dateien" 
04.
set "Kennung=2010" 
05.
 
06.
for /d %%i in ("%Quelle%\*.*") do if exist "%%i\%Kennung%" ( 
07.
    md "%Archiv%%%~pi%Kennung%" 2>nul 
08.
    echo move "%%i\%Kennung%" "%Archiv%%%~pi%Kennung%" || echo %%i>>"%Fehler%" 
09.
)
Das "echo" steht nur zum gefahrlosen Testen drin ...

Grüße
bastla
Bitte warten ..
Mitglied: photographix
09.06.2010 um 14:40 Uhr
@ Bastla TRAUMHAFT
wie lange muss man sich mit Batch beschäftigen damit man so etwas, wie du schreibst "ungetestet, hinbekommt...

Lässt sich das noch etwas tunen?

01.
move "Z:\\101\2010\2010-01" "D:\neu\2010\2010-01"  
02.
move "Z:\\102\2010\2010-01" "D:\neu\2010\2010-01"  
03.
move "Z:\\105\2010\2010-01" "D:\neu\2010\2010-01"  
04.
move "Z:\\106\2010\2010-01" "D:\neu\2010\2010-01"  
05.
move "Z:\\106_EA\2010\2010-01" "D:\neu\2010\2010-01"  
06.
move "Z:\\107\2010\2010-01" "D:\neu\2010\2010-01"  
07.
move "Z:\\108\2010\2010-01" "D:\neu\2010\2010-01"  
08.
move "Z:\\110\2010\2010-01" "D:\neu\2010\2010-01"  
09.
move "Z:\\1101\2010\2010-01" "D:\neu\2010\2010-01"  
10.
move "Z:\\1102\2010\2010-01" "D:\neu\2010\2010-01"  
11.
move "Z:\\112\2010\2010-01" "D:\neu\2010\2010-01"  
12.
move "Z:\\113\2010\2010-01" "D:\neu\2010\2010-01"  
13.
move "Z:\\116\2010\2010-01" "D:\neu\2010\2010-01"  
14.
move "Z:\\118\2010\2010-01" "D:\neu\2010\2010-01"  
15.
move "Z:\\1203\2010\2010-01" "D:\neu\2010\2010-01"  
16.
move "Z:\\1204\2010\2010-01" "D:\neu\2010\2010-01"  
17.
move "Z:\\1205\2010\2010-01" "D:\neu\2010\2010-01"  
18.
move "Z:\\1206\2010\2010-01" "D:\neu\2010\2010-01" 
ich würde gern wollen das der "Überordner" auch mit erstellt wird
Bitte warten ..
Mitglied: bastla
09.06.2010 um 15:04 Uhr
Hallo photographix!

So sollte das besser gehen:
01.
for /d %%i in ("%Quelle%\*.*") do if exist "%%i\%Kennung%" ( 
02.
    md "%Archiv%%%~pnxi" 2>nul 
03.
    move "%%i\%Kennung%" "%Archiv%%%~pnxi" || >>"%Fehler%" echo %%i\%Kennung% 
04.
)
Grüße
bastla
Bitte warten ..
Mitglied: photographix
09.06.2010 um 15:10 Uhr
Hiho Bastla,

jetzt gehts aber nicht mehr...

01.
Das System kann den angegebenen Pfad nicht finden. 
02.
Zugriff verweigert 
03.
Das System kann den angegebenen Pfad nicht finden. 
04.
Zugriff verweigert 
05.
Das System kann den angegebenen Pfad nicht finden. 
06.
Zugriff verweigert 
07.
Das System kann den angegebenen Pfad nicht finden. 
08.
Zugriff verweigert 
09.
Das System kann den angegebenen Pfad nicht finden. 
10.
Zugriff verweigert 
11.
Das System kann den angegebenen Pfad nicht finden. 
12.
Zugriff verweigert 
13.
Das System kann den angegebenen Pfad nicht finden. 
14.
Zugriff verweigert 
15.
Das System kann den angegebenen Pfad nicht finden.
Edit:

Die Überordner werden erstellt aber ohne die Unterordner und den Rest

01.
move "z:\2103\2010\2010-01" "D:\neu\2103"  
02.
move "z:\2104\2010\2010-01" "D:\neu\2104"  
03.
move "z:\2105\2010\2010-01" "D:\neu\2105"  
04.
move "z:\2106\2010\2010-01" "D:\neu\2106"  
05.
move "z:\2107\2010\2010-01" "D:\neu\2107"  
06.
move "z:\2108\2010\2010-01" "D:\neu\2108"  
07.
move "z:\2201\2010\2010-01" "D:\neu\2201"  
08.
move "z:\2301\2010\2010-01" "D:\neu\2301" 
mit "echo" in der Version geht es (+\%Kennung%)

01.
for /d %%i in ("%Quelle%\*.*") do if exist "%%i\%Kennung%" ( 
02.
    md "%Archiv%%%~pnxi" 2>nul 
03.
    move "%%i\%Kennung%" "%Archiv%%%~pnxi\%Kennung%" || >>"%Fehler%" echo %%i\%Kennung% 
04.
)
leider nicht mit move

01.
Das System kann den angegebenen Pfad nicht finden. 
02.
Das System kann den angegebenen Pfad nicht finden. 
03.
        0 Datei(en) verschoben. 
04.
Das System kann den angegebenen Pfad nicht finden. 
05.
Das System kann den angegebenen Pfad nicht finden. 
06.
        0 Datei(en) verschoben. 
07.
Das System kann den angegebenen Pfad nicht finden. 
08.
Das System kann den angegebenen Pfad nicht finden. 
09.
        0 Datei(en) verschoben.
Bitte warten ..
Mitglied: bastla
09.06.2010 um 15:27 Uhr
Hallo photographix!

"E:\Firma\Dokumente\" hast Du offensichtlich durch "Z:\" ersetzt, und "D:\Verschobene Dateien" ist zu "D:\neu" geworden; könntest Du daher bitte den gesamten Batch posten?

Grüße
bastla
Bitte warten ..
Mitglied: photographix
09.06.2010 um 15:33 Uhr
Ja kann ich gern machen

01.
@echo off & setlocal 
02.
set "Quelle=z:" 
03.
set "Archiv=D:\neu"  <- Testordner 
04.
set "Kennung=2010\2010-01" 
05.
 
06.
for /d %%i in ("%Quelle%\*.*") do if exist "%%i\%Kennung%" ( 
07.
    md "%Archiv%%%~pnxi" 2>nul 
08.
    echo move "%%i\%Kennung%" "%Archiv%%%~pnxi\%Kennung%" || >>"%Fehler%" echo %%i\%Kennung% 
09.
)
dieser Teil mit Echo funktioniert zumindest laut Debug Log
Nur wenn ich das echo entferne geht es nicht mehr
Bitte warten ..
Mitglied: bastla
09.06.2010 um 15:50 Uhr
Hallo photographix!

Da Du (anders als in meinem Ansatz) als Kennung einen Ordner mit Unterordner verwendest, ergibt sich daraus das Problem, dass am Ziel der Teilpfad "2010" noch fehlt - daher ein Versuch mit expliziter Angabe der beiden Pfade:
01.
@echo off & setlocal 
02.
set "Quelle=z:" 
03.
set "Archiv=D:\neu"  <- Testordner 
04.
set "Jahr=2010" 
05.
set "Monat=2010-01" 
06.
 
07.
for /d %%i in ("%Quelle%\*.*") do if exist "%%i\%Jahr%\%Monat%" ( 
08.
    md "%Archiv%%%~pnxi\%Jahr%" 2>nul 
09.
    move "%%i\%Jahr%\%Monat%" "%Archiv%%%~pnxi\%Jahr%" || >>"%Fehler%" echo %%i\%Jahr%\%Monat% 
10.
)
Grüße
bastla
Bitte warten ..
Mitglied: photographix
09.06.2010 um 15:56 Uhr
Danke für deine Geduld

also mit echo geht es ohne echo nicht
leider kann ich nicht ausmachen wo der Fehler ist.

Z: ist ein Netzlaufwerk
D: ist lokal
Rechte sind auf "Jeder alles" eingestellt

Die Überordner + 2010 wird ohne Probleme erstellt
also der Teil

01.
md "%Archiv%%%~pnxi\%Jahr%" 2>nul
im move Teil ist wohl das Problem zu suchen
Bitte warten ..
Mitglied: bastla
09.06.2010 um 16:07 Uhr
Hallo photographix!

Wie sieht denn jetzt die Fehlermeldung aus?

Eigentlich sollte unter Batch das Verschieben auf andere Partitionen / Laufwerke möglich sein, aber zur Not ließe sich das ja auch aufteilen:
01.
@echo off & setlocal 
02.
set "Quelle=z:" 
03.
set "Archiv=D:\neu" 
04.
set "Jahr=2010" 
05.
set "Monat=2010-01" 
06.
 
07.
for /d %%i in ("%Quelle%\*.*") do if exist "%%i\%Jahr%\%Monat%" ( 
08.
    xcopy /e "%%i\%Jahr%\%Monat%" "%Archiv%%%~pnxi\%Jahr%\%Monat%\" || >>"%Fehler%" echo %%i\%Jahr%\%Monat% 
09.
    rd /s /q "%%i\%Jahr%\%Monat%" 
10.
)
(Jetzt könnten %Jahr% und %Monat% wieder in einer Variablen zusammengefasst werden).

Grüße
bastla
Bitte warten ..
Mitglied: photographix
09.06.2010 um 16:13 Uhr
Hiho und ein fettes DANKE in der Hitze!,

woran es auch immer lag
mit der xcopy Version geht es problemlos!!

LG und nochmals Danke
Bitte warten ..
Mitglied: SamvanRatt
09.06.2010 um 18:07 Uhr
Hi
SamFS auf ZFS ist wirklich perfekt; da gibt es bereits einige Ansätze dazu. Ein HP EVA System kann da auch nicht viel mehr und kostet dann rund 100 mal mehr/GB.
Gruß
Sam
Bitte warten ..
Neuester Wissensbeitrag
Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (22)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...