Batch move von Textdatei um Log erweitern

CuNoah

Cadet 4th Year
Registriert
Aug. 2009
Beiträge
85
Hallo zusammen,

ich habe einen einfachen Batchjob, der eine Textdatei verschiebt.

move c:\datei1.txt e:\datei1.txt

Wäre es möglich den Inhalt vor dem Verschieben in eine Logdatei auszugeben? Idealerweise mit
Zeitstempel davor? In der Quelldatei sind meist nur ein paar Zeilen. Diese würde ich gerne auf Dauer in einer kompletten Logdatei sammeln.

Bzw. was wären die Befehle, die man dafür verwendet? Nur das ich eine grobe Richtung zum weiter
suchen habe.

Vielen Dank.
 
Wenn es Batch sein soll:

-- TYPE DATEI schreibt den Inhalt von DATEI auf das Ausgabegerät. DATEI muß dazu existieren.
-- DATE /T schreibt das aktuelle Datum (plus CRLF) auf das Ausgabegerät
-- TIME /T macht dasselbe mit der aktuellen Uhrzeit
-- BEFEHL > LOG (größer-als-Zeichen) überschreibt den Inhalt von LOG mit der Ausgabe von BEFEHL
-- BEFEHL >> LOG (zwei größer-als-Zeichen) hängt die Ausgabe von BEFEHL ans Ende von LOG an
--- Jeweils eine 2 vor das erste > schreibt die Fehlerausgabe (soweit vorhanden) statt der Befehlsausgabe
--- LOG muß nicht existieren, sondern wird ggf neu erstellt.
 
Vielen Dank, das hilft mir sehr weiter. Wusste im ersten Moment gar nicht wo nach ich suchen soll :)
Ergänzung ()

Hallo zusammen,

noch kurz zwei fragen. move überschreibt ohne Rückfrage, jetzt habe ich eine Abfrage IF EXIST eingefügt. Scheint auch soweit alles zu passen :)

- Ist es bei Batchfiles i.O. mit GOTO zu arbeiten? Ist ja allgemein nicht so gerne gesehen
- Ist EXIT richtig, um an der Stelle aus der Verarbeitung auszusteigen?

Das wäre jetzt mein Script, falls noch jemand Tipps hat, sehr gerne :)


Code:
IF EXIST c:\datei1.txt goto ende

echo %date% %time% >> c:\log.txt
type c:\datei1.txt >> c:\log.txt
echo. >> %log%
echo. >> %log%                      
move c:\datei1.txt e:\datei1.txt
exit

:ende
echo %date% %time% >> c:\log.txt
echo Dateiexistiertnoch >> c:\log.txt
echo. >> c:\log.txt
echo. >> c:\log.txt
exit
 
Siehst, an %date% und %time% hatt ich gar nicht mehr gedacht. Schon zu lange her. :lol:

MOVE kennt die Optionen /Y und /-Y, womit ein Prompt angefordert bzw unterdrückt wird, falls das Ziel existiert. "Normal" sollte eigentlich das Prompt kommen, aber...

Vermeide EXIT. Das beendet den Kommandoprozessor. Per Doppelklick wär das relativ egal, aber wenn Du die Datei auf der Kommandozeile ausführst... ist die Kommandozeile weg.

GOTO in Batch ist mehr oder weniger okay. Aber ändere die Struktur ein bißchen. In etwa so:

Code:
IF EXIST X  GOTO X_EXISTIERT
Befehl, der ausgeführt wird, wenn X nicht existiert
GOTO ENDE
:X_EXISTIERT
Befehl, der ausgeführt wird, wenn X existiert
GOTO ENDE
Was hier steht, wird nicht erreicht
:ENDE
Befehle, die unbedingt ausgeführt werden

Außerdem geht noch so:
Code:
IF EXIST X (
Befehle für wenn X existiert
) ELSE (
Befehle für wenn X NICHT existiert
)
Die Position der Klammern ist insoweit wichtig, daß IF EXIST .. ( auf eine Zeile muß und, soweit der ELSE-Zweig gebraucht wird, alles auf eine Zeile kommt.

Das geht zB nicht:
Code:
if exist A 
( #Syntaxfehler => ( muß eins höher; außerdem wird der "tu was" Block unabhängig vom IF ausgeführt
tu was
)
else # Befehl oder Dateiname nicht gefunden
( # Dieser Block wird ebenfalls unabhängig ausgeführt
tu was anderes
)
 
Dann sage ich noch mal vielen Dank für die Hilfe. Damit konnte ich den Batchjob noch entsprechend anpassen. Macht jetzt genau was er soll :)

Danke
 
Zurück
Oben