Top-Themen

Aktuelle Themen (A bis Z)

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

For Schleife - Robocopy gibt trotz Setlocal EnableDelayedExpansion nur Errorlevel 0 zurück

Mitglied: michelo82

michelo82 (Level 1) - Jetzt verbinden

25.06.2014, aktualisiert 10:09 Uhr, 1150 Aufrufe, 5 Kommentare

Hallo,

und zwar bastel ich an einem Sicherungsskript welches mit Robocopy die Daten kopiert, die Zeit dieses Vorganges misst, das ganze in eine HTML Datei speichert und mir per Mail sendet. Hier würde ich gern das Errorlevel von Robocopy ausgeben. Leider bekomme ich nur Errorlevel 0 zurück. Ich habe wohl einen Fehler in meiner Syntax.

Hier einmal das ganze Skript (etwas eingekürzt):
01.
::-------------------------------------------------------- 
02.
::-- Taegliche_Sicherung 
03.
::-- Letzte Änderung: 20.06.2014 
04.
::-- Author: michelo82 
05.
::-------------------------------------------------------- 
06.
@echo off 
07.
::-------------------------------------------------------- 
08.
::-- Variablen 
09.
::-- Pfad zur HTML Datei 
10.
set html="D:\robocopy_log.html" 
11.
 
12.
::-- prüfe ob HTML Datei vorhanden, wenn ja diese löschen 
13.
if exist %html% del %html% /q 
14.
 
15.
::-- Robocopy starten 
16.
echo Robocopy arbeitet 
17.
call::RoboCopyFunktion "robocopy "e:\test1" "d:\test1" /MIR /TEE" 
18.
::call::RoboCopyFunktion "u.s.w"  
19.
 
20.
::-- schicke Bestätigungsmail 
21.
call:SendMailFunkion 
22.
 
23.
::-------------------------------------------------------- 
24.
::-- Funktions sektion beginnt hier 
25.
::-------------------------------------------------------- 
26.
 
27.
:RoboCopyFunktion 
28.
::-- starte Timer - dauer der Batch ermitteln 
29.
set /a timerstart=((1%time:~0,2%-100)*60*60)+((1%time:~3,2%-100)*60)+(1%time:~6,2%-100) 
30.
 
31.
::-- Robocopy starten und Zeit aus Robocopy Ausgabe ermitteln 
32.
for /f "tokens=*" %%g in ('%~1^|findstr "Quelle"') do set Quelle=%%g 
33.
for /f "tokens=*" %%g in ('%~1^|findstr "Gestartet"') do set Gestartet=%%g 
34.
for /f "tokens=*" %%g in ('%~1^|findstr "Beendet"') do set Beendet=%%g 
35.
call:ErrorLevelFunktion 
36.
 
37.
::-- beende Timer - dauer der Batch ermitteln 
38.
set /a timerstop=((1%time:~0,2%-100)*60*60)+((1%time:~3,2%-100)*60)+(1%time:~6,2%-100) 
39.
set /a timeseks=(%timerstop%-%timerstart%) 
40.
set /a timemins=(%timerstop%-%timerstart%)/60 
41.
echo Dauer Sicherung %Quelle%: %timemins% min. %timeseks% sek. 
42.
 
43.
::-- baue Ausgabe für Bestätigungsmail und hänge diese in eine HTML-Datei an 
44.
echo ^<html^>^<body^>^<h3^>%Quelle%^</h3^>^<table border="1"^>^<tr^>^<td^>^<b^>Errorlevel^</b^>^</td^>^<td^>%bodytext%^</td^>^</tr^>^<tr^>^<td^>^<b^>Gestartet^</b^>^</td^>^<td^>%Gestartet%^</td^>^</tr^>^<tr^>^<td^>^<b^>Beendet^</b^>^</td^>^<td^>%Beendet%^</td^>^</tr^>^<tr^>^<td^>^<b^>Dauer des Vorgangs^</b^>^</td^>^<td^>%timemins% min. %timeseks% sek.^</td^>^</tr^>^</table^>^</body^>^</html^> >> %html% 
45.
goto:eof 
46.
 
47.
::-- Errorlevel bestimmen 
48.
:ErrorLevelFunktion 
49.
if /i %ErrorLevel%==0 ( 
50.
set bodytext=Es wurden keine Dateien kopiert. Keine Fehler. Keine Dateien stimmen nicht ueberein. Die Dateien sind bereits im Zielverzeichnis vorhanden; aus diesem Grund wurde beim Kopieren uebersprungen. 
51.
52.
if /i %ErrorLevel%==1 ( 
53.
set bodytext=Alle Dateien wurden erfolgreich kopiert. 
54.
55.
if /i %ErrorLevel%==2 ( 
56.
set bodytext=Es gibt einige zusaetzlichen Dateien im Zielverzeichnis, die nicht im Quellverzeichnis vorhanden sind. Es wurden keine Dateien kopiert. 
57.
58.
if /i %ErrorLevel%==3 ( 
59.
set bodytext=Einige Dateien wurden kopiert. Zusaetzliche Dateien waren vorhanden. Keine Fehler. 
60.
61.
if /i %ErrorLevel%==5 ( 
62.
set bodytext=Einige Dateien wurden kopiert. Einige Dateien stimmten nicht ueberein. Keine Fehler. 
63.
64.
if /i %ErrorLevel%==6 ( 
65.
set bodytext=Zusaetzliche Dateien und nicht uebereinstimmenden Dateien vorhanden sind. Es wurden keine Dateien kopiert, und es sind keine Fehler aufgetreten. Dies bedeutet, dass die Dateien im Zielverzeichnis bereits vorhanden sind. 
66.
67.
if /i %ErrorLevel%==7 ( 
68.
set bodytext=Dateien kopiert wurden, ein Dateikonflikt vorhanden war, und zusaetzliche Dateien vorhanden waren. 
69.
70.
if /i %ErrorLevel%==8 ( 
71.
set bodytext=Mehrere Dateien wurden nicht kopiert. 
72.
73.
if %ErrorLevel% GTR 8 ( 
74.
set bodytext=groesser als 8 - unbedingt manuell pruefen. 
75.
76.
goto:eof 
77.
 
78.
::-- Bestätigungsmail senden 
79.
:SendMailFunkion 
80.
sendmail.exe to:mailadresse subject:"Sicherung" smtp:mailserver from:mailadresse html bodytext:"Bitte Anhang pruefen..." add:%html% 
81.
goto:eof
So nun hätte ich meine RobocopyFunktion wie folgt umgebaut um das Errorlevel auszugeben:
01.
... 
02.
@echo off & Setlocal EnableDelayedExpansion 
03.
... 
04.
... 
05.
... 
06.
 
07.
:RoboCopyFunktion 
08.
::-- starte Timer - dauer der Batch ermitteln 
09.
set /a timerstart=((1%time:~0,2%-100)*60*60)+((1%time:~3,2%-100)*60)+(1%time:~6,2%-100) 
10.
 
11.
::-- Robocopy starten und Zeit aus Robocopy Ausgabe ermitteln 
12.
for /f "tokens=*" %%g in ('%~1^|findstr "Quelle"') do set Quelle=%%g 
13.
for /f "tokens=*" %%g in ('%~1^|findstr "Gestartet"') do set Gestartet=%%g 
14.
for /f "tokens=*" %%g in ('%~1^|findstr "Beendet"') do set Beendet=%%g do ( 
15.
set Beendet=%%g 
16.
echo !ERRORLEVEL! 
17.
)
Leider bekomme ich hier immer 0 als Rückgabewert. Was mache ich falsch?

Hat jemand einen Tipp für mich? Vielen Dank schonmal.
Mitglied: Snowman25
25.06.2014 um 11:52 Uhr
Hallo michelo82,

der Errorlevel ist vom FINDSTR-Command gesetzt.

Gruß,
Snowman25
Bitte warten ..
Mitglied: michelo82
25.06.2014 um 14:22 Uhr
Danke für deine Antwort.
Wie komme ich dann an das Robocopy errorlevel? Das Findstr brauche ich für meine Ausgabe.
Bitte warten ..
Mitglied: Snowman25
25.06.2014, aktualisiert um 17:08 Uhr
Warum machst du's nicht auf dem "normalen" Weg, dass du das LOG von robocopy speicherst und verarbeitest?
Wenn du es mit START /WAIT ausführst kannst du sichergehen, dass der Vorgang abgeschlossen ist, bevor weitere Aktionen durchlaufen.
Denn DAS: for /f "tokens=*" %%g in ('%~1^|findstr "Quelle"') do set Quelle=%%g ist schon eine SEHR Eigensinnige Variante.

Du startest dabei übrigens 3 mal den gleichen Vorgang. Wieso?
Schick dir doch einfach das Robocopy-Log anstelle der HTML-Bastelei?
Bitte warten ..
Mitglied: Friemler
25.06.2014 um 20:31 Uhr
Hallo michelo82,

so weit ich weiß, liefert Robocopy nur in der alten Version XP010 einen aussagekräftigen Errorlevel zurück. Die neueren Versionen (XP026 und die in den Betriebssystemen ab Vista enthaltenen) liefern immer 0 als Errorlevel.

Du kannst das ja sehr einfach testen, indem Du einen RoboCopy-Befehl absetzt, der auf jeden Fall fehl schlagen muss (z.B. nicht existierender Quell- oder Zielpfad).

Gruß
Friemler
Bitte warten ..
Mitglied: michelo82
26.06.2014 um 11:16 Uhr
Hallo,

@Friemler: Robocopy liefert schon errorlevel zurück. Das passt schon...
@Snowman25: Ich denke du hast recht, ich muss das nochmal anpassen und mir meine Ausgabe aus den Logs basteln.

Ich wollte eben mit dieser Methode eine ganz schlanke Ausgabe erreichen. Quasi Tabellarisch Servername, Gestartet, Beendet und die Gesamtdauer in Minuten.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Setlocal enabledelayedexpansion und Sonderzeichen (z.B. !-Zeichen)

Frage von adm2015Batch & Shell2 Kommentare

Hallo Zusammen, ich bin mir sicher, dass dieses Thema schon öfters angesprochen wurde. Leider finde ich hierzu aber nichts. ...

Windows Server

For Schleife mit Errorlevel

Frage von berlingerWindows Server5 Kommentare

Hallo Zusammen ich versuche aus einer Text-Datei die IP-Adresse auszulesen und anschliessend via PSEXEC auf dem Zielrechner einen Registry-Key ...

Batch & Shell

Abfrage ERRORLEVEL springt aus der FOR Schleife

gelöst Frage von GalindieselBatch & Shell8 Kommentare

Liebe Gemeinde, ich habe eine kleine batch geschrieben, die aus einer liste (IPs) heraus Laufwerke mappen soll, darauf dann ...

Batch & Shell

ERRORLEVEL-Übergabe in einer FOR-Schleife mit psexec

gelöst Frage von zeusplanetBatch & Shell2 Kommentare

Hi Leute, komme einfach nicht weiter, bzw. auf keine einfache Lösung. Ich sichere mehrere Server über eine Batch (Drive ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 1 TagWindows 105 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 1 TagAdministrator.de Feedback18 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 2 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Windows Netzwerk
Backup über WAN
Frage von petereWindows Netzwerk11 Kommentare

Hallo, ich muss aus einem entfernten WAN (synchrone 1Gbit) Daten sichern. Dabei handelt es sich sowohl um wenige große ...

Hyper-V
Hyper-V mit altem XEON-Server. Was ist falsch?
Frage von LollipopHyper-V11 Kommentare

Hallo Bin etwas frustriert. Kleinbetrieb, ca. 15 PC's, 2 Stk. Server mit einigen virtuellen PC's für Fernwartung, VaultServer für ...