72036
Goto Top

PROBLEM - Auswertung von Log-Dateien

Hallo,
ich habe eine Batch-Datei programmiert, mit der ich eine Datei von meinem Rechner in ein Verzeichnis auf einen Server kopieren kann.
Zudem habe ich mit dem Befehl: >> c:\log\logdatei.txt
eine Log-Datei schreiben lassen, die mir anzeigt ob die Übertragung geklappt hat oder nicht.
Soweit funktioniert das auch alles.

Nun habe ich aber ein Problem.
Die zu kopierende Datei soll nicht nur auf einen Server, sondern auf mehrere verschiedene kopiert werden.

Jetzt brauche ich hierzu auch eine Log-Datei, die mir nicht nur anzeigt, ob das geklappt hat oder nicht.
Sie müsste mir auch anzeigen können, auf welchen Servern ein Problem bei der Übertragung aufgetreten ist, damit man dort den Vorgang nochmal wiederholen kann.

Kann mir hierbei jemand helfen??

Alina

Content-ID: 102090

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

Ausgedruckt am: 22.11.2024 um 13:11 Uhr

Tsocin
Tsocin 18.11.2008 um 13:57:01 Uhr
Goto Top
Da du mit Batch arbeitest:

echo Kopiere Datei nach server12345 >> c:\log\logdatei.txt

Das ganze mit dem entsprechenden Servernamen vor den copy-Befehl setzen und schon taucht im Logfile immer die obige Zeile auf, darunter das Ergebnis des Kopiervorgangs (wie bisher).


Grüße
72036
72036 18.11.2008 um 14:05:01 Uhr
Goto Top
Ich habe das jetzt soweit ausprobiert.
Es hat auch geklappt, dass die obige Zeile immer im Logfile auftaucht und darunter das Ergebnis des Kopiervorgangs.
Das Problem ist jetzt nur, dass wenn es nicht funktioniert, immer noch dieselbe Zeile dort auftaucht und nicht mehr, dass es einen Fehler gab.

Grüße
72036
72036 18.11.2008 um 14:19:56 Uhr
Goto Top
So ich habe mir jetzt nochmal genauer Gedanke über deinen Hinweis gemacht, Tsocin und jetzt klappt alles.
Ich habe den Befehl jetzt so aufgeteilt, dass es "zwei verschiedene Wege" gibt:

Zunächst gebe ich ein, was ich kopieren möchte und wohin:
copy "zu kopierende Datei" "Zielverzeichnis"

Anschließend gebe ich "zwei mögliche Wege" vor:
if errorlevel 1 goto no (Übertragung hat nicht geklappt)
if errorlevel 0 goto yes (Übertragung hat geklappt)

:no (falls Übertragung nicht geklappt hat, folgt er diesem Weg)
echo Fehler bei Kopieren der Datei nach "Servername">> c:\log\logdatei.txt (diese Nachricht erscheint)
rem echo no
rem
cls
echo *
echo * *
echo Daten nicht uebertragen!!!
echo * *
echo
*
pause
goto ende


:yes (falls Übertragung geklappt hat, folgt er diesem Weg)
echo Kopiere Datei nach "Servername">> c:\log\logdatei.txt (diese Nachricht erscheint)

cls
echo *
echo * *
echo * Alle Daten wurden uebertragen *
echo * *
echo *

rem echo off

goto ende


Vielen Dank nochmal für deinen Hinweis face-wink
Hat mir echt sehr geholfen.

Grüße Alina
aqui
aqui 18.11.2008 um 15:01:53 Uhr
Goto Top
miniversum
miniversum 18.11.2008 um 20:10:41 Uhr
Goto Top
Nur als kleiner Verbesserungsvorschlag.
Wenn du nur nach errorlevel 0 (also erfolgreiche Kopie) prüfst udn alles andere als Fehlerhaft ansiehst klapt es auch wen du z.B. mal einen anderen Errorlevel größer 1 hast.

copy "zu kopierende Datei" "Zielverzeichnis"
if errorlevel 0 goto yes else goto no

:no
...
:yes
...
Biber
Biber 18.11.2008 um 21:25:23 Uhr
Goto Top
Hmmmjein, miniversum,

Die Aussage ist richtig, aber der Beweis/das Beispiel genau verkehrt herum.
if errorlevel 0 goto yes else goto no
Nochmal zum Nachturnen am CMD-Prompt.
Der Befehl "md" ohne Parameter erzeugt einen Fehler/ein ERROLEVEL größer 0.
Dann dürfte das hier:
[das ">" am Zeilenbeginn ist der Prompt, NICHT mit eintippen]
>md 2>nul & if errorlevel 0 (echo errlevel 0) else echo errlevel-other
errlevel 0
...nicht passieren.....
Richtig(er) herum wäre es so:
>md 2>nul & if not errorlevel 1 (echo errlevel 0) else echo errlevel-other
errlevel-other
-->denn "if not ErrorLevel 1" heißt ja auf deutsch "wenn ErrorLevel nicht 1 oder größer ist"
[schlaubergerModus an]
Etwas anderes wäre die Prüfung auf textuelle Gleichheit
IF "%errorlevel%"=="0" goto :allesPrima  
aber das knicken wir mal wieder ganz schnell...
[/schlaubergerModus aus]

Die lesbarste und stilistisch beste ist ohnehin der bastla-Standard
 (irgendeinbefehl) || goto :Fehler
-bzw-
(irgendeinbefehl) && goto :keinFehler_oderZumindestKeinErrorlevelGesetzt

Grüße
Biber