Laufwerk auf externe Festplatte kopieren mit Rückgabe eines Errorlevels
Hallo zusammen,
ich habe eine Batch geschrieben, in der mit Hilfe von Fastcopy eine Festplatte auf eine von drei externen kopiert werden. Die Laufwerksbuchstaben sind den externen Festplatten fest zugeordnet.
REM Parameter von Fastcopy
SET Parameter=c:\Computer\Scripts\fastcopy.exe /cmd=sync /force_close /open_window /log /speed=full
IF EXIST T: %Parameter% "S:\" /to="T:\"
IF EXIST U: %Parameter% "S:\" /to="U:\"
IF EXIST V: %Parameter% "S:\" /to="V:\"
Funktioniert zwar einwandfrei aber leider erhalte ich keinen Rückgabewert, falls keines der Laufwerke erreichbar ist bzw. Kopiervorgang scheitert. Die Batch ist bei True Image als Nach-Befehl hinterlegt, aber egal ob ein Laufwerk vorhanden ist oder nicht es wird immer angezeigt, dass die Batch korrekt durchlief. Der Kopiervogang ist aber dann gescheitert.
Für mich stellt sich jetzt die Frage, ob Fastcopy überhaupt ein errorlevel zurückgibt und wie ich dieses Abfragen kann, sodass True Image einen Fehler melden würde, fall der Kopiervorgang scheitert. Oder muss ich auf ein anderes Programm umsteigen?
Gruß und Dank!
ich habe eine Batch geschrieben, in der mit Hilfe von Fastcopy eine Festplatte auf eine von drei externen kopiert werden. Die Laufwerksbuchstaben sind den externen Festplatten fest zugeordnet.
REM Parameter von Fastcopy
SET Parameter=c:\Computer\Scripts\fastcopy.exe /cmd=sync /force_close /open_window /log /speed=full
IF EXIST T: %Parameter% "S:\" /to="T:\"
IF EXIST U: %Parameter% "S:\" /to="U:\"
IF EXIST V: %Parameter% "S:\" /to="V:\"
Funktioniert zwar einwandfrei aber leider erhalte ich keinen Rückgabewert, falls keines der Laufwerke erreichbar ist bzw. Kopiervorgang scheitert. Die Batch ist bei True Image als Nach-Befehl hinterlegt, aber egal ob ein Laufwerk vorhanden ist oder nicht es wird immer angezeigt, dass die Batch korrekt durchlief. Der Kopiervogang ist aber dann gescheitert.
Für mich stellt sich jetzt die Frage, ob Fastcopy überhaupt ein errorlevel zurückgibt und wie ich dieses Abfragen kann, sodass True Image einen Fehler melden würde, fall der Kopiervorgang scheitert. Oder muss ich auf ein anderes Programm umsteigen?
Gruß und Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 252769
Url: https://administrator.de/contentid/252769
Ausgedruckt am: 22.11.2024 um 06:11 Uhr
5 Kommentare
Neuester Kommentar
nimm doch robocopy, ungefähr so
IF EXIST T: set drive=t: & goto copy
IF EXIST U: set drive=u: & goto copy
IF EXIST V: set drive=v: & goto copy
goto :ERROR
:copy
ROBOCOPY S: %drive% *.* /MIR /COPYALL
IF %ERRORLEVEL% LSS 8 goto OK
:ERROR
exit /b 1
:OK
exit /b 0
Hallo Exzel,
Exit Codes von Programmen können über die in Batchscript vordefinierte Variable
abgefragt werden. Bei der zuletzt genannten Variante darf
Um zu testen, ob FastCopy einen aussagekräftigen Exit Code liefert, führe es in einer Batchdatei durch einen Direktaufruf aus, ohne umgebenden Code. Übergib dabei Parameter, die auf jeden Fall zu einem Fehlschlag des Kopiervorgangs führen müssen (nicht existierendes Quellverzeichnis o.ä.). Das könnte dann ungefähr so aussehen:
Gruß
Friemler
Exit Codes von Programmen können über die in Batchscript vordefinierte Variable
%ErrorLevel%
oder in der Formif errorlevel 2 goto xyz
errorlevel
nicht in Prozentzeichen eingeschlossen werden, es dürfen nicht die üblichen Vergleichsoperatoren verwendet werden und die Bedingung ist (in obigem Beispiel) erfüllt, wenn der Exit Code des zuletzt ausgeführten Befehls größer oder gleich 2 ist. Die Auswertung von errorlevel
muss deshalb beim größtmöglichen Wert beginnen und mit dem kleinsten Wert aufhören (siehe Beispiel unten). Mit %ErrorLevel%
kann hingegen ganz normal wie mit jeder anderen Batchscript-Variablen gearbeitet werden.Um zu testen, ob FastCopy einen aussagekräftigen Exit Code liefert, führe es in einer Batchdatei durch einen Direktaufruf aus, ohne umgebenden Code. Übergib dabei Parameter, die auf jeden Fall zu einem Fehlschlag des Kopiervorgangs führen müssen (nicht existierendes Quellverzeichnis o.ä.). Das könnte dann ungefähr so aussehen:
C:\Computer\Scripts\fastcopy.exe "s:\gibt_es_nicht" /to="T:\gibt_es_auch_nicht"
if errorlevel 4 (echo Exit Code größer oder gleich 4 & goto :eof)
if errorlevel 3 (echo Exit Code größer oder gleich 3 & goto :eof)
if errorlevel 2 (echo Exit Code größer oder gleich 2 & goto :eof)
if errorlevel 1 (echo Exit Code größer oder gleich 1 & goto :eof)
echo Exit Code ist 0
Gruß
Friemler