exzel
Goto Top

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!

6882513fbe2efd586f22e05126335e0a

Content-Key: 252769

Url: https://administrator.de/contentid/252769

Printed on: April 18, 2024 at 23:04 o'clock

Mitglied: 114757
114757 Oct 22, 2014, updated at Oct 24, 2014 at 14:56:44 (UTC)
Goto Top
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
Member: Friemler
Friemler Oct 22, 2014 at 18:53:46 (UTC)
Goto Top
Hallo Exzel,

Exit Codes von Programmen können über die in Batchscript vordefinierte Variable %ErrorLevel% oder in der Form
if errorlevel 2 goto xyz
abgefragt werden. Bei der zuletzt genannten Variante darf 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
Member: Exzel
Exzel Oct 23, 2014 at 08:52:36 (UTC)
Goto Top
Hallo zusammen,

herzlichen Dank für Eure schnelle Hilfe.

Im Screenshot habe ich nun mal das Ergebnis von Fastcopy veröffentlicht. Sieht so aus als würde es kein errorlevel zurückgeben. Sehe ich das richtig?

Wenn ja, dann versuche ich es mit robocopy.

Gruß
Member: Friemler
Friemler Oct 23, 2014 at 08:55:29 (UTC)
Goto Top
Hallo Exzel,

tja, das sieht in der Tat schlecht aus. Nimm robocopy.

Gruß
Friemler
Member: Exzel
Exzel Oct 23, 2014 at 13:50:42 (UTC)
Goto Top
Hallo,

man o man. Jetzt habe ich das o.g. Script mit Robocopy verwendet und dennoch wird immer die korrekte Ausführung des Scripts angezeigt. Einziger Unterschied ist, dass ich die Anführungszeichen bei den Laufwerken weggelassen habe da das Script sonst nicht lief.

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


Ich habe nun im Acronis Forum mal nachgefragt, wie der Rückgabewert von True Image gewertet wird. Mal sehen....

Gruß