Errorlevel bei xcopy ist immer 0 obwohl keine Dateien kopiert wurden
Hallo
Ich bräuchte mal ein wenig Denkanstoß für mein kurzes Batch-Synchronisierungsscript!
Erklärung zum Nutzen des Scripts:
Mit USBDLM lasse ich das Script automatisch starten, wenn ich den betreffenden USB-Stick einstecke und dieses Soll dann den Ordner auf der Platte und auf dem Stick synchronisieren. Das starten klappt auch wunderbar dank des super Dienstes USBDLM, nur das Script will nicht so richtig - ok genauergesagt ist es nur noch eine kleine Schönheitskorrektur, die Synchronisation ansich läuft auch...
Hier erstmal das Script:
Gedacht ist, dass das das CMD-Fenster zugeht, wenn keine Dateien kopiert wurden, aber wenn bei einem der beiden xcopy-Befehle irgendetwas kopiert wurde, soll vor dem exit noch eine Pause sein und erst nach Tastendruck soll das CMD-Fenster geschlossen werden.
Meine Idee war es, den Errorcode von xcopy abzufragen und eine temporäre Datei zu erstellen, wenn nichts kopiert wurde. Existiert vor dem Beenden der Batch die Datei, dann diese löschen und das Script pausieren.
Soweit sogut, aber irgendwie ist der Errorlevel immer 0, ob nun etwas kopiert wurde oder nicht?! Ich hab schon gegooglet und in allen Beispielen wurde einfach der xcopy Befehl benutzt und dahinter dann ein "if errorlevel blablablubb" - bei mir ändert der sich aber nicht, ob nun was gemacht wird oder nicht...
Liegt das vielleicht an den Schaltern von xcopy, dass er bei diesen IMMER etwas macht, sprich der Errorcode immer 0 ist, auch wenn keine Dateien kopiert werden?
Hat jemand noch eine andere Idee, wie ich das "pausieren oder durchlaufen" bewerkstelligen kann?
Gruß Dark
Ich bräuchte mal ein wenig Denkanstoß für mein kurzes Batch-Synchronisierungsscript!
Erklärung zum Nutzen des Scripts:
Mit USBDLM lasse ich das Script automatisch starten, wenn ich den betreffenden USB-Stick einstecke und dieses Soll dann den Ordner auf der Platte und auf dem Stick synchronisieren. Das starten klappt auch wunderbar dank des super Dienstes USBDLM, nur das Script will nicht so richtig - ok genauergesagt ist es nur noch eine kleine Schönheitskorrektur, die Synchronisation ansich läuft auch...
Hier erstmal das Script:
@echo off
echo\
echo Synchronisiere Festplatte mit USB-Stick...
echo\
xcopy "D:\Installs\*.*" "J:\Installs\" /sdyhcrv /exclude:D:\Programme\Batches\Synchronisieren-Exclude.txt
if errorlevel 1 echo\ > %temp%\synchronisieren
echo\
echo\
echo\
echo Synchronisiere Festplatte mit USB-Stick...
echo\
xcopy "J:\Installs\*.*" "D:\Installs\" /sdyhcrv /exclude:D:\Programme\Batches\Synchronisieren-Exclude.txt
if errorlevel 1 echo\ > %temp%\synchronisieren
echo\
echo\
echo\
if exist %temp%\synchronisieren goto EXIT
::pause
exit
:EXIT
del %temp%\synchronisieren
exit
Meine Idee war es, den Errorcode von xcopy abzufragen und eine temporäre Datei zu erstellen, wenn nichts kopiert wurde. Existiert vor dem Beenden der Batch die Datei, dann diese löschen und das Script pausieren.
Soweit sogut, aber irgendwie ist der Errorlevel immer 0, ob nun etwas kopiert wurde oder nicht?! Ich hab schon gegooglet und in allen Beispielen wurde einfach der xcopy Befehl benutzt und dahinter dann ein "if errorlevel blablablubb" - bei mir ändert der sich aber nicht, ob nun was gemacht wird oder nicht...
Liegt das vielleicht an den Schaltern von xcopy, dass er bei diesen IMMER etwas macht, sprich der Errorcode immer 0 ist, auch wenn keine Dateien kopiert werden?
Hat jemand noch eine andere Idee, wie ich das "pausieren oder durchlaufen" bewerkstelligen kann?
Gruß Dark
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 134079
Url: https://administrator.de/contentid/134079
Ausgedruckt am: 24.11.2024 um 22:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo TheDarkLord!
Hinsichtlich des Errorlevels warten wir mal besser auf Biber - aber vielleicht so:
[Edit] Auf (hoffentlich ) effizientere Version geändert - aber nur ohne "/L" ... [/Edit]
Grüße
bastla
Hinsichtlich des Errorlevels warten wir mal besser auf Biber - aber vielleicht so:
set "P="
xcopy "D:\Installs\*.*" "J:\Installs\" /sdyhcrv /exclude:D:\Programme\Batches\Synchronisieren-Exclude.txt>%temp%\Kopie.log
for /f "delims=" %%i in (%temp%\Kopie.log) do set "Erg=%%i" & echo %%i
if "%Erg%"=="0 Datei(en) kopiert" set "P=True"
...
...
If not defined P pause
Grüße
bastla
Hallo,
sonst nimm http://www.skittel.de/software/gcopy
Nur exclude kann es noch nicht. Errorlevel aber schon.
Stefan
sonst nimm http://www.skittel.de/software/gcopy
Nur exclude kann es noch nicht. Errorlevel aber schon.
Stefan
Moin TheDarkLurch,
Moin bastla und StefanKittel,
ich weiß nicht, was ihr immer an den Redmonder PraktikantInnen rumzumäkeln habt.
Wie hättet ihr denn einen XCopy-Errorlevel implementiert?
Natürlich war es so (wenn man/frau versucht, sich in den Redmonder Ablauf hineinzuversetzen)
Im Pflichtenheft für diese Aufgabe (hat ein graduierter Informatiker zusammengeharkt) steht als Vorgabe
In der zusammenschrotenden Ebene (ein Zimmer voll pickliger Highschool-Hängehöschen-Kids) wird umgesetzt
Da das eh keiner prüft, wird auch den Kumpels am Ende der Nahrungskette, also denen, die weder Highschoolabschluss noch Hängehöschen haben und nur die Endanwender-Dokumentation erstellen müssen, eben mal die Notizzettel, die während der Teamsitzungen mitgeschrieben wurden.
Die abgetippten Teamsitzungsprotokolle zusammengerührt mit den Vorgaben des Pflichtenhefts in optisch ansprechende Form gebracht ergeben dann diesen Text aus der Windows-Offline-Hilfe:
Ich schwör euch, genauso hat es sich zugetragen.
Grüße
Biber
Moin bastla und StefanKittel,
ich weiß nicht, was ihr immer an den Redmonder PraktikantInnen rumzumäkeln habt.
Wie hättet ihr denn einen XCopy-Errorlevel implementiert?
Natürlich war es so (wenn man/frau versucht, sich in den Redmonder Ablauf hineinzuversetzen)
Im Pflichtenheft für diese Aufgabe (hat ein graduierter Informatiker zusammengeharkt) steht als Vorgabe
- Prüfe Xcopy formal auf Syntaxfehler, wenn Syntaxfehler, dann höchstes Errorlevel [also 4]
- Wenn kein Syntaxfehler, aber absolut krasses Lowlevelproblem (physischer Plattenfehler, Hauptspeicher reicht nicht, Lesen wird verweigert) dann Errorlevel 3
- Abbruch durch User (Strg-C gedrückt) ist dann Errorlevel 2
- Errorlevel 1 wird dann "Keine Dateien zum Kopieren gefunden"
- Errorlevel 0 ist "Alles prima"
In der zusammenschrotenden Ebene (ein Zimmer voll pickliger Highschool-Hängehöschen-Kids) wird umgesetzt
- Ey, einen krassen Errorlevel, also 4 gibt es, wenn der Anwender Müll eingibt, also Syntaxfehler oder aber auch wenn er explizit eine Datei OHNE Wildcards kopieren will, die es nicht gibt (e.g. "Xcopy bla.blubb D:\temp /LSD" -->Errorlevel 4) oder wenn auf ein nicht vorhandes Ziel kopiert wird
- Errorlevel 3 gibt es gar nicht... (Einsparung von 20%, das bringt Mitarbeiterbonus!!)
- Errorlevel 2 bei User-Abbruch
- Errorlevel 1, wenn Anzahl zu kopierender Dateien ungleich Anzahl Dateien im Ziel [ergo: 0 Dateien zum Kopieren gefunden und ebenfalls 0 Dateien kopiert ergibt: Anzahl ist gleich, KEIN Errorlevel 1!!
- Errorlevel 0 ist "Alles prima"
Da das eh keiner prüft, wird auch den Kumpels am Ende der Nahrungskette, also denen, die weder Highschoolabschluss noch Hängehöschen haben und nur die Endanwender-Dokumentation erstellen müssen, eben mal die Notizzettel, die während der Teamsitzungen mitgeschrieben wurden.
Die abgetippten Teamsitzungsprotokolle zusammengerührt mit den Vorgaben des Pflichtenhefts in optisch ansprechende Form gebracht ergeben dann diesen Text aus der Windows-Offline-Hilfe:
...
Beendigungscodes bei xcopy
In der folgenden Liste sind alle Beendigungscodes mit einer kurzen Beschreibung ihrer Bedeutung aufgeführt:
0 Die Dateien wurden ohne Fehler kopiert.
1 Es wurden keine zu kopierenden Dateien gefunden.
2 Der Benutzer hat xcopy durch Drücken von STRG+C abgebrochen.
3 Es ist ein Initialisierungsfehler aufgetreten. Es steht nicht genügend Speicherplatz auf dem Datenträger oder im Arbeitsspeicher zur Verfügung,
Sie haben eine ungültige Laufwerkbezeichnung eingegeben oder eine unzulässige Syntax in der Befehlszeile verwendet.
4 Beim Schreiben auf den Datenträger ist ein Fehler aufgetreten.
Ich schwör euch, genauso hat es sich zugetragen.
Grüße
Biber
Zitat von @Biber:
ich weiß nicht, was ihr immer an den Redmonder PraktikantInnen rumzumäkeln habt.
Wie hättet ihr denn einen XCopy-Errorlevel implementiert?
So hab ichs gemacht bei GCopy:ich weiß nicht, was ihr immer an den Redmonder PraktikantInnen rumzumäkeln habt.
Wie hättet ihr denn einen XCopy-Errorlevel implementiert?
0 Vorgang ohne Fehler
1 Fehler bei den Parametern
2 Fehler beim Kopieren
3 Abbruch durch den Benutzer
Bei der Reihenfolge habe ich mir allerdings keine Gedanken gemacht...
Keine Datei ist bei mir kein Fehler, da dies bei sync ja wirklich vorkommen kann.
Ich schwör euch, genauso hat es sich zugetragen.
*breites grinsen*Was lutscht Du eigentlich zu dieser Zeit?
Hallo TheDarkLord!
Das zweimalige Durchlaufen des "xcopy" ist ja eigentlich unnötig - daher die Änderungen oben, wobei ich leider vergessen hatte, den Schalter "/L" wieder zu entfernen ...
Auch das Setzen des Schalters habe ich mir nochmals überlegt - sinnvoller ist es, diesen auf "True" zu setzen, wenn nicht keine Datei (ja,ist ernst gemeint ) kopiert wurde, also:
Dann kannst Du auch für das zweite "xcopy" den selben Schalter verwenden (welcher Kopiervorgang das "True" gesetzt hat, unterscheidest Du ja - derzeit - ohnehin nicht und die ODER-Verknüpfung ist auch so realisiert) und im Endeffekt die letzen Zeilen (ab 25) auf
reduzieren (aus ist der Batch danach ja sowieso ) ...
Grüße
bastla
Das zweimalige Durchlaufen des "xcopy" ist ja eigentlich unnötig - daher die Änderungen oben, wobei ich leider vergessen hatte, den Schalter "/L" wieder zu entfernen ...
Auch das Setzen des Schalters habe ich mir nochmals überlegt - sinnvoller ist es, diesen auf "True" zu setzen, wenn nicht keine Datei (ja,ist ernst gemeint ) kopiert wurde, also:
if "%Erg%" neq "0 Datei(en) kopiert" set "P=True"
if defined P pause
Grüße
bastla