maddog1982
Goto Top

Batch nur Clients aus einer Logdatei auswerten bei denen Fehler beim kopieren aufgetreten sind

Ich habe folgendes anliegen,

ich kopiere per Xcopy Befefehl in einer Batch Datei verschiedene Daten zu den Windows Clients im Netzwerk.

in der Datei clients.txt stehen alle Clients unseres Netzwerkes
@echo on
for /f %%i in (clients.txt) do xcopy \\%computername%\Programm\test \\%%i\Programm\test


Zusätzlich log ich den kompl. Befehl mit, Log sieht wie folgt aus

D:\test>xcopy \\SRV-TEST-DO\Program\test \\CLIENT1\Programm\test
Ungltige Laufwerkangabe
0 Datei(en) kopiert

D:\test>xcopy \\SRV-TEST-DO\Program\test \\CLIENT2\Programm\test
186 Datei(en) kopiert


Jetzt kommt mein Problem, da das Log bei 50 Clients ziemlich unübersichtlich wird möchte ich ein zusätzliches Log in der eine Zusammenfassung steht nur von den Clients wo ein Fehler beim kopieren aufgetreten ist.

Wie bekomme ich das hin?

Content-ID: 86143

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

Ausgedruckt am: 20.11.2024 um 11:11 Uhr

bastla
bastla 22.04.2008 um 20:49:08 Uhr
Goto Top
Hallo Maddog1982!

Du könntest einfach den Errorlevel des "xcopy"-Befehles nutzen und eine entsprechende Meldung in eine Fehler-Log-Datei schreiben:
for /f %%i in (clients.txt) do xcopy \\%computername%\Programm\test \\%%i\Programm\test||(echo Fehler bei %%i)>>D:\LogFehler.txt

Grüße
bastla
Maddog1982
Maddog1982 22.04.2008 um 21:13:13 Uhr
Goto Top
Danke, hat auf anhieb funktioniert

Kannst du mir das erklären?
bastla
bastla 22.04.2008 um 21:31:00 Uhr
Goto Top
Hallo Maddog1982!

http://technet2.microsoft.com/WindowsServer/de/library/44500063-fdaf-4e ... (unter "Verwenden mehrerer Befehle und Symbole zur bedingten Verarbeitung")

Grüße
bastla
Maddog1982
Maddog1982 22.04.2008 um 21:53:14 Uhr
Goto Top
jetzt benötige ich nur noch die Auskunft wie ich den aktuellen Errorlevel bekomme.
Wenn ich folgendes mache


bekomme ich immer Errorlevel 0 angezeigt, wieso?
Biber
Biber 22.04.2008 um 22:48:34 Uhr
Goto Top
Moin Maddog1982,

bekomme ich immer Errorlevel 0 angezeigt, wieso?
Weil alle Variablen, die (aus Sicht der CMD.exe) in einer Zeile/einer einzigen Anweisung stehen sozusagen "beim Lesen" einmalig aufgelöst werden.

Deshalb hat %errorlevel% immer den Wert, den es auch "beim Lesen" der ersten Befehlsworte dieser Zeile hat.
Also bevor irgendeine Schleife überhaupt losläuft.

Abhilfe. Variable "verzögert", erst beim Ausführen auflösen - neudeutsch "DelayedExpansion".

Setlocal EnableDelayedExpansion
for /f %%i in (clients.txt) do xcopy \\%computername%\Programm\test \\%%i\Programm\test||(echo Fehler bei %%i wegen !errorlevel!)>>D:\LogFehler.txt

Die "verzögert" aufzulösende Variable wird in Ausrufezeichen gesetzt (!errorlevel!) statt wie sonst in Prozentzeichen (%errorlevel%).

Grüße
Biber
Maddog1982
Maddog1982 23.04.2008 um 22:14:15 Uhr
Goto Top
Vielen Dank ihr habt mir super geholfen, Task kann als erledigt gekennzeichnet werden