Batch Robocopy abfragen?

CreatorX

Lt. Junior Grade
Registriert
Mai 2011
Beiträge
271
Hallo an alle,
ich nutze robocopy in einem Skript und würde gerne abfragen, ob robocopy tatsächlich etwas kopiert bzw im Zielverzeichnis verändert hat. Ist das möglich?
 
Mit den richtigen Parmetern siehst du ja eine Ausgabe in der Kommandozeile und kannst ein Log generieren lassen:
Code:
Robocopy.exe /XJ /MIR /DST /COPY:DAT /R:1 /W:2 /TS /FP /NDL /ETA /NP /TEE /LOG+:"C:\RoboLog.log"

Du kannst noch den Rückgabewert prüfen:
Code:
if errorlevel 16 echo  ***FATAL ERROR***  & echo  ***FATAL ERROR***  >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
if errorlevel 15 echo FAIL MISM XTRA COPY & echo FAIL MISM XTRA COPY >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
if errorlevel 14 echo FAIL MISM XTRA      & echo FAIL MISM XTRA      >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
if errorlevel 13 echo FAIL MISM      COPY & echo FAIL MISM      COPY >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
if errorlevel 12 echo FAIL MISM           & echo FAIL MISM           >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
if errorlevel 11 echo FAIL      XTRA COPY & echo FAIL      XTRA COPY >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
if errorlevel 10 echo FAIL      XTRA      & echo FAIL      XTRA      >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
if errorlevel  9 echo FAIL           COPY & echo FAIL           COPY >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
if errorlevel  8 echo FAIL                & echo FAIL                >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
if errorlevel  7 echo      MISM XTRA COPY & echo      MISM XTRA COPY >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
if errorlevel  6 echo      MISM XTRA      & echo      MISM XTRA      >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
if errorlevel  5 echo      MISM      COPY & echo      MISM      COPY >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
if errorlevel  4 echo      MISM           & echo      MISM           >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
if errorlevel  3 echo           XTRA COPY & echo           XTRA COPY >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
if errorlevel  2 echo           XTRA      & echo           XTRA      >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
if errorlevel  1 echo                COPY & echo                COPY >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
if errorlevel  0 echo    --no change--    & echo    --no change--    >> "C:\RoboLog.log" & GOTO:RobocopyStatusEnd
:RobocopyStatusEnd
 
Eine Logdatei bringt mir jetzt so nix, ich muss das direkt in der Batch weiterverarbeiten.
Also hab ich das richtig verstranden, ich kann einfach direkt unter dem robocopy-Befehl z.b.
if errorlevel 0 then...
setzen und das Skript weiß somit dass robocopy nix kopieren musste, weil alle Dateien auf dem selben Stand waren?
 
Das ist die grundlegende Funktionsweise aller Kommandozeilnprogramme. Normalerweise wird wenigstens errorlevel 0 oder 1 zurückgegeben. Robocopy gibt 0 zurück, wenn keine Operation durchgeführt wurde.
 
Gut, wenn robocopy errorlevel 0 zurückgibt heißt das es wurde nix kopiert. Wäre ja simpel
Allerdings gibt es da ein Problem. Wenn zum Beispiel das Quellverzeichnis nicht gefunden wurde, gibt es auch eine Fehlermeldung zurück und dennoch wurde nix kopiert. Wie müsste eine Abfrage in dem Fall aussehen?
 
Öhm, da bin ich scheinbar einem Irrtum unterlegen. Ich dachte immer, robocopy übernimmt auch hier die Synchronisation, sprich wenn der Quellordner nicht mehr vorhanden, wird automatisch der Zielordner gelöscht. Hab bisher gar nicht mitbekommen dass dem nicht so ist, aber gut zu wissen :p
Danke erstmal.
 
Probiers doch aus...
Bei fehlender Quelle bricht Robocopy ab und liefert errorlevel 16 (Gerade getestet unter Windows 10)
 
Weiß ich ja inzwischen. Ich habe, so wie von dir vorgeschlagen einfach die Existenz des Quellverzeichnis überprüft und wenn nicht vorhanden, lasse ich das Zielverzeichnis nun löschen.
 
Zurück
Oben