Supportnet / Forum / BS-Sonstige
for schleife mit unterverzeichnissen
Frage
ich möchte einen Datenabgleich von zwei festplatten durchführen.
Dazu kopiere ich erst alle dateien die geändert oder neu sind mit xcopy von d nach e, was auch super funktioniert, möchte dann aber noch auf d gelöschte dateien auch von e entfernen.
Ich habe es mit
for %%f in (*.*) do if not exist d:\%%f del e:\%%f
versucht, aber das funktioniert immer nur im aktuellen verzeichnis.
Gibt es eine Möglichkeit diese routine auf alle unterverzeichnisse anzuwenden oder muss ich mir da was ganz anderes einfallen lassen?
Gruß,
Florian
Antwort 1 von Massaraksch
for /r D:\ %%f ...
Schalter "/r [Startverzeichnis]" ab WinNT verfügbar.
Massaraksch
Schalter "/r [Startverzeichnis]" ab WinNT verfügbar.
Massaraksch
Antwort 2 von Massaraksch
Oder du besorgst dir das Kommandozeilen-Tool "robocopy" von Microsoft. Damit kann man Verzeichnisstrukturen spiegeln.
Ist z.B. in den "Windows Server 2003 Resource Kit Tools" enthalten.
(natürlich immer vorausgesetzt, du arbeitest nicht unter reinem DOS sondern unter Windows)
Massaraksch
Ist z.B. in den "Windows Server 2003 Resource Kit Tools" enthalten.
(natürlich immer vorausgesetzt, du arbeitest nicht unter reinem DOS sondern unter Windows)
Massaraksch
Antwort 3 von Florian Bluhm
Ich hab Windows 98 laufen. Der Schalter /r tuts da noch nicht. Kann ich den denn durch addins irgendwie einbauen oder Dos so modifizieren dass er den kennt?
Dieses robocopy kann ich mir mal ansehen. Aber wenn es nur die verzeichnisstrucktur spiegeln nutzt es mir ja nichts, denn ich muss ja auch die in den verzeichnissen enthaltenen Dateien mitkopieren.
Jedenfals schonmal danke für eure hilfe.
Dieses robocopy kann ich mir mal ansehen. Aber wenn es nur die verzeichnisstrucktur spiegeln nutzt es mir ja nichts, denn ich muss ja auch die in den verzeichnissen enthaltenen Dateien mitkopieren.
Jedenfals schonmal danke für eure hilfe.
Antwort 4 von Massaraksch
Damit meinte ich natürlich inclusive Dateien. Sonst wär's ja relativ nutzlos. Sorry für den mißverständlichen Satz ;-)
Ich weiß nur nicht genau, ob Robocopy auch unter Win9x läuft. Laut Doku eigentlich für NT/2K/XP.
Abe man kanns ja mal testen...
Massaraksch
Ich weiß nur nicht genau, ob Robocopy auch unter Win9x läuft. Laut Doku eigentlich für NT/2K/XP.
Abe man kanns ja mal testen...
Massaraksch
Antwort 5 von manei
Hallo,
wenn Du das mit dir /s (bezieht Unterverzeichnisse mit ein) machst sollte es klappen, also
for %%f in ("dir /s e:\*.*") do if not exist d:\%%f del e:\%%f
Aber das geht auch einfacher, schau Dir mal das Programm "xxcopy" bei www.xxcopy.com an. Vor allem für Dich interessant dürfte der Parameter clone sein. Damit werden nur die neu hinzu gekommenen und geänderten Dateien kopiert und nicht mehr existente Dateien auf der Ursprungsplatte werden auf der zweiten Platte auch gelöscht. Das Programm arbeitet sehr schnell und ist Freeware für Privat.
MfG maneich
wenn Du das mit dir /s (bezieht Unterverzeichnisse mit ein) machst sollte es klappen, also
for %%f in ("dir /s e:\*.*") do if not exist d:\%%f del e:\%%f
Aber das geht auch einfacher, schau Dir mal das Programm "xxcopy" bei www.xxcopy.com an. Vor allem für Dich interessant dürfte der Parameter clone sein. Damit werden nur die neu hinzu gekommenen und geänderten Dateien kopiert und nicht mehr existente Dateien auf der Ursprungsplatte werden auf der zweiten Platte auch gelöscht. Das Programm arbeitet sehr schnell und ist Freeware für Privat.
MfG maneich
Antwort 6 von Massaraksch
Sowas wie for %%f in ("dir /s e:\*.*") ... geht leider unter Win9x nicht (for kann dort keine Befehle auswerten).
Aber dieses xxcopy scheint ein sehr nützliches Tool zu sein...
Massaraksch
Aber dieses xxcopy scheint ein sehr nützliches Tool zu sein...
Massaraksch
Antwort 7 von manei
Hallo,
wo Massaraksch Recht hat hat er Recht; ganze Befehlszeilen lassen sich unter Win9x-Systemen nicht verarbeiten, bzw. nur ganz bestimmte Befehle.
Um Dein Problem zu lösen, benötigst Du einen Zähler und ein Programm das zeilenweise verarbeiten kann. Z.B. Varset und LMOD (beides Freeware) von http://home.mnet-online.de/horst.muc.
Dann ginge das z.B. wie folgt:
dir /s /b E:\>%Temp%.\tmp.txt
call var set a=0
call var set b=lines %Temp%.\tmp0.txt
:schl1
if %a%==%b% goto end
call var set a=%a%+1
type %Temp%.\tmp0.txt|lmod /L%a% set x=[4]>%Temp%.\tmp1.txt
call %Temp%.\tmp1.txt
if not exist D:\%x% del E:\%x%>nul
goto schl1
:end
del %Temp%.\tmp?.txt
for %%e in (a b x) do set %%e=
Dies wäre der grobe Ablauf. Mit xxcopy ginge das alles viel besser und schneller.
MfG maneich
wo Massaraksch Recht hat hat er Recht; ganze Befehlszeilen lassen sich unter Win9x-Systemen nicht verarbeiten, bzw. nur ganz bestimmte Befehle.
Um Dein Problem zu lösen, benötigst Du einen Zähler und ein Programm das zeilenweise verarbeiten kann. Z.B. Varset und LMOD (beides Freeware) von http://home.mnet-online.de/horst.muc.
Dann ginge das z.B. wie folgt:
dir /s /b E:\>%Temp%.\tmp.txt
call var set a=0
call var set b=lines %Temp%.\tmp0.txt
:schl1
if %a%==%b% goto end
call var set a=%a%+1
type %Temp%.\tmp0.txt|lmod /L%a% set x=[4]>%Temp%.\tmp1.txt
call %Temp%.\tmp1.txt
if not exist D:\%x% del E:\%x%>nul
goto schl1
:end
del %Temp%.\tmp?.txt
for %%e in (a b x) do set %%e=
Dies wäre der grobe Ablauf. Mit xxcopy ginge das alles viel besser und schneller.
MfG maneich

