Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Errorlevel bei xcopy ist immer 0 obwohl keine Dateien kopiert wurden

Frage Entwicklung Batch & Shell

Mitglied: TheDarkLord

TheDarkLord (Level 1) - Jetzt verbinden

21.01.2010, aktualisiert 22.01.2010, 8967 Aufrufe, 7 Kommentare

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:
01.
@echo off 
02.
 
03.
echo\ 
04.
echo Synchronisiere Festplatte mit USB-Stick... 
05.
echo\ 
06.
xcopy "D:\Installs\*.*" "J:\Installs\" /sdyhcrv /exclude:D:\Programme\Batches\Synchronisieren-Exclude.txt  
07.
if errorlevel 1 echo\ > %temp%\synchronisieren 
08.
echo\ 
09.
echo\ 
10.
echo\ 
11.
echo Synchronisiere Festplatte mit USB-Stick... 
12.
echo\ 
13.
xcopy "J:\Installs\*.*" "D:\Installs\" /sdyhcrv /exclude:D:\Programme\Batches\Synchronisieren-Exclude.txt 
14.
if errorlevel 1 echo\ > %temp%\synchronisieren 
15.
echo\ 
16.
echo\ 
17.
echo\ 
18.
if exist %temp%\synchronisieren goto EXIT 
19.
::pause 
20.
exit 
21.
 
22.
:EXIT 
23.
del %temp%\synchronisieren 
24.
exit
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
Mitglied: bastla
21.01.2010 um 22:47 Uhr
Hallo TheDarkLord!

Hinsichtlich des Errorlevels warten wir mal besser auf Biber - aber vielleicht so:
01.
set "P=" 
02.
xcopy "D:\Installs\*.*" "J:\Installs\" /sdyhcrv /exclude:D:\Programme\Batches\Synchronisieren-Exclude.txt>%temp%\Kopie.log 
03.
for /f "delims=" %%i in (%temp%\Kopie.log) do set "Erg=%%i" & echo %%i 
04.
if "%Erg%"=="0 Datei(en) kopiert" set "P=True" 
05.
... 
06.
... 
07.
If not defined P pause
[Edit] Auf (hoffentlich ) effizientere Version geändert - aber nur ohne "/L" ... [/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: StefanKittel
21.01.2010 um 23:31 Uhr
Hallo,

sonst nimm http://www.skittel.de/software/gcopy
Nur exclude kann es noch nicht. Errorlevel aber schon.

Stefan
Bitte warten ..
Mitglied: Biber
22.01.2010 um 00:30 Uhr
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

  • 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"
--> Damit haben die PraktikantInnen einen Errorlevel komplett eingespart, zwei Errorlevel nach Vorgabe umgesetzt und zwei weitere kreativ erweitert.

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
Bitte warten ..
Mitglied: StefanKittel
22.01.2010 um 00:55 Uhr
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:
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?
Bitte warten ..
Mitglied: TheDarkLord
22.01.2010 um 12:17 Uhr
Hallo

Danke für die Antworten!
@ Bastla: Es funktioniert super, danke! Vielleicht hab ich es jetzt etwas umständlich geschrieben, kannst ja nochmal drüber schauen, ob es eleganter zu machen ist
Ach ja, wie kann ich die Variablen nur lokal nutzen? Irgendwas mit set local war das oder? Nur wo hin...

01.
@echo off 
02.
 
03.
set "A=" 
04.
set "B=" 
05.
echo\ 
06.
echo Kopiere von Festplatte auf USB-Stick... 
07.
echo\ 
08.
xcopy "D:\Installs\*.*" "J:\Installs\" /Lsdyhcrv /exclude:D:\Programme\Batches\Synchronisieren-Exclude.txt >%temp%\synchronisieren1.log 
09.
for /f "delims=" %%i in (%temp%\synchronisieren1.log) do set "Erg=%%i"  
10.
if "%Erg%"=="0 Datei(en) kopiert" set "A=True" 
11.
xcopy "D:\Installs\*.*" "J:\Installs\" /sdyhcrv /exclude:D:\Programme\Batches\Synchronisieren-Exclude.txt 
12.
echo\ 
13.
echo\ 
14.
echo\ 
15.
echo Kopiere von USB-Stick auf Festplatte... 
16.
echo\ 
17.
xcopy "J:\Installs\*.*" "D:\Installs\" /Lsdyhcrv /exclude:D:\Programme\Batches\Synchronisieren-Exclude.txt >%temp%\synchronisieren2.log 
18.
for /f "delims=" %%i in (%temp%\synchronisieren2.log) do set "Erg=%%i"  
19.
if "%Erg%"=="0 Datei(en) kopiert" set "B=True" 
20.
xcopy "J:\Installs\*.*" "D:\Installs\" /sdyhcrv /exclude:D:\Programme\Batches\Synchronisieren-Exclude.txt 
21.
echo\ 
22.
echo\ 
23.
echo\ 
24.
 
25.
if not defined A goto PAUSE 
26.
if not defined B goto PAUSE 
27.
exit 
28.
 
29.
:PAUSE 
30.
pause 
31.
exit
Gruß Dark
Bitte warten ..
Mitglied: bastla
22.01.2010 um 13:16 Uhr
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:
if "%Erg%" neq "0 Datei(en) kopiert" set "P=True"
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
if defined P pause
reduzieren (aus ist der Batch danach ja sowieso ) ...

Grüße
bastla
Bitte warten ..
Mitglied: TheDarkLord
22.01.2010 um 13:56 Uhr
Vielen Dank für die Hilfe, Bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Nach xcopy feststellen, ob Datei kopiert wurde oder nicht (9)

Frage von Scar61 zum Thema Batch & Shell ...

Erkennung und -Abwehr
Überwachen welche Dateien auf USB Stick-Festplatte kopiert werden (4)

Frage von daniel.buchner77 zum Thema Erkennung und -Abwehr ...

Batch & Shell
gelöst Batch kopiert immer wieder die gleichen Dateien (1)

Frage von nobbi49 zum Thema Batch & Shell ...

Batch & Shell
Dateien mit vorgegebener Größe erstellbar? (2)

Frage von Stefan007 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...