26741
Goto Top

Errormeldung und Ausgabe in Log-Datei

Hallo,

ich habe ein Batch-Script geschrieben, welches in der Firma automatisiert Dateien backuppen und sortieren soll.

Ich möchte aber gerne keine Ausgaben und Fehler auf der Konsole angezeigt haben. Bisher habe ich es nur geschafft, entweder die Fehler oder die Ausgaben zu unterdrücken bzw. in eine Logdatei zu schreiben.

Hier das Stück Code:
ECHO.
ECHO Verschiebe XY-Daten
MOVE "%path_xydata%\*.%xy_filetype%" "%save_path%\%save_xydata%"
ECHO ============================================================= >> %save_path%\%logfile%
ECHO -----DONE-----

Wie kann ich jetzt von dem MOVE auch noch die verschobenen Dateien ins Logfile verschieben, nicht nur Fehlermeldungen??

In diesem Beitrag ist das Problem ebenfalls angeschnitten und auch keine richtige Lösung, nur Workarounds gefunden worden: Batchdatei - Logschreiben aber trotzdem Textausgabe in der Konsole

Ich danke schonmal für jeden Tipp!!


Johannes

Content-Key: 27959

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

Printed on: April 26, 2024 at 05:04 o'clock

Member: maneich
maneich Mar 11, 2006 at 16:15:41 (UTC)
Goto Top
Hallo,

also zunächst mal, wenn du hinter/unter dem echo keine pause machst, kannst du das ja überhauptnicht lesen, da so diese Zeile zwar angezeigt wird aber in Millisekunden wieder verschwindet.

Also wenn du das auch lesen möchtest dann z.B. mit

for %%e in (echo pause) do %%e Verschiebe XY-Daten

Aber nun zum eigentlichen Problem.

Du hast Dateien im Verzeichnis %a% liegen und willst diese nach Verzeichnis %b% verschieben. Außerdem soll kein prompt angezeigt werden, sondern dieser soll in eine Log-Datei geschrieben werden. Außerdem sollen die verschobenen Dateien auch noch ins Logfile geschrieben werden. Ist das soweit richtig?

Nun, die Ausgabe vom Move ist doch
Verzeichnis\Datei => Verzeichnis [OK] wenn alles gut gelaufen ist und z.B.
%adresse%\dateixyz.txt kann nicht verschoben werden - Datei oder Verzeichnis nicht vorhanden
oder eine andere Fehlermeldung wenn ein Fehler aufgetreten ist

Außerdem gibt Move einen Errorlevel zurück
0 wenn OK und
größer 0 meist 1 wenn nicht OK

Somit hast du 2 Möglichkeiten zu bestimmen was ohne prompt passieren soll

1. move %a%\datei.txt %b%>nul
damit wird die Ausgabe ins nichts geleitet, man kann aber trotzdem über über die Abfrage

If errorlevel 1 (bedeutet errorlevel >= 1)

feststellen ob fehlerfrei oder nicht und das auch in eine Datei schreiben.

2. move %a%\datei.txt %b%>>logfile.txt
Damit steht, wie oben bereits ausgeführt der Vorgang in der Logfile und zwar egal ob verschieben OK oder nicht OK

Willst Du das gesamte Verzeichnis verschieben, geht das am einfachsten mit:

for /f "tokens=*" %%e in ('dir /s /b %a%') do move %%e %b%>>logfile.txt

damit steht auch jede einzelne Datei in Verzeichnis %a% in der Logfile, ob kopiert oder nicht.

In %a% und %b% stehen natürlich die Verzeichnisadressen von und nach.

MfG maneich
Mitglied: 26741
26741 Mar 11, 2006 at 16:33:37 (UTC)
Goto Top
hi,

also zunächst mal, wenn du hinter/unter
dem echo keine pause machst, kannst du das ja
überhauptnicht lesen, da so diese Zeile
zwar angezeigt wird aber in Millisekunden
wieder verschwindet.

keine Panik, das Script ist ja noch viel länger und hat mehr Funktionen. War nur ein Auszug daraus... ;)

for %%e in (echo pause) do %%e Verschiebe
XY-Daten

ich habe mich in den letzten Tagen in Batch-Programmierung mal wieder bisschen aufgefrischt und nachgelesen.
Ich frage mich aber, warum sämtliche Sachen mit for-Schleifen gelöst werden, die IMHO viel einfacher auch anders gelöst werden könnten...

Du hast Dateien im Verzeichnis %a% liegen
und willst diese nach Verzeichnis %b%
verschieben. Außerdem soll kein prompt
angezeigt werden, sondern dieser soll in eine
Log-Datei geschrieben werden. Außerdem
sollen die verschobenen Dateien auch noch
ins Logfile geschrieben werden. Ist das
soweit richtig?

richtig. Mein Script funktioniert auch einwandfrei.
Ich möchte nur die Ausgabe
Datei XY
Datei YY
Datei YX
"X Dateien verschoben"
sowie die Ausgabe "datei xyz kann nicht verschoben werden/existiert nicht/existiert schon" ins Logfile schreiben.
Also sowohl die Statusmeldungen, wie auch die Fehlermeldungen.

If errorlevel 1 (bedeutet errorlevel >=
1)
feststellen ob fehlerfrei oder nicht und das
auch in eine Datei schreiben.

bringt aber nix, da ich die Fehlermeldung nit mehr auslesen kann.

2. move %a%\datei.txt
%b%>>logfile.txt
Damit steht, wie oben bereits
ausgeführt der Vorgang in der Logfile
und zwar egal ob verschieben OK oder nicht
OK

das geht nit. Wenn ich es als 2>> pipe, sind nur Fehlermeldungen im Logfile. Wenn ich >> ohne Errorlevel verwende, sind nur Statusmeldungen im Logfile.

Willst Du das gesamte Verzeichnis
verschieben, geht das am einfachsten mit:
for /f "tokens=*" %%e in ('dir /s
/b %a%') do move %%e %b%>>logfile.txt

wieder so ein Beispiel. Vielleicht kannst du ja mal begründen, warum eine for-Schleife hier sinnvoller ist, wie das verzeichnis einfach nur mit move zu verschieben...
Vielleicht kannst du mir auch kurz die Funktion der Schleife erklären, vielleicht verstehe ich dann den Hintergrund...
In meinem Fall will ich aber nur die Files aus dem Verzeichnis verschieben.

Danke dir schonmal!


Johannes
Member: Schirrmeister
Schirrmeister Mar 11, 2006 at 17:35:19 (UTC)
Goto Top
Du kannst die Fehlerausgabe in den normalen Ausgabestrom umleiten, und diesen dann in die Datei (oder umgekehrt).
Das Umleiten sieht dann etwa so aus:
>> datei.txt 2>&1
Mitglied: 26741
26741 Mar 11, 2006 at 17:47:24 (UTC)
Goto Top
hi,

es funktioniert!

Werde es jetzt mal ausführlich testen, schätze aber, dass das war, was ich gesucht hab.

ciao


Johannes
Mitglied: 18133
18133 Mar 12, 2006 at 17:13:56 (UTC)
Goto Top
hi,

mal mir dir > datei.log probiert ?

Gruß
Mitglied: 26741
26741 Mar 20, 2006 at 13:00:31 (UTC)
Goto Top
also hier nochmal die korrekte Lösung:

MOVE "%path_xydata%\*.%xy_filetype%" "%save_path%\%save_xydata%"
%save_path%\%logfile% 2>&1

oder ein einfaches Beispiel:

ECHO Dieser Text kommt in die Date >> datei.txt 2>&1