miniversum
Goto Top

%Time% Variable ändert sich nicht.

%Time Variabel innerhalb einer Batch Datei immer gleich

Hallo
Ich habe hier einen Ausschnitt aus einer Batch Datei dieich gerade Schreibe:

FOR /F "eol=; tokens=1* delims=" %%a in (Optionen.txt) do (
echo %%a wird gestartet
echo Option %%a: >> %Logfile%
echo %Date%%Time%: Programm gestartet
echo %Date%%Time%: Programm gestartet >> %Logfile%
C:\Programm.exe %%a
echo %Date%%Time%: Programm beendet
echo %Date%%Time%: Programm beendet >> %Logfile%
echo.
echo. >> %Logfile%
)

Dabei sollen, wie man sehen kann, immer wieder Statusmeldungen mit dem aktuellen Datum und der aktuellen Zeit ausgegeben werden und in einem Logfile gespeichert werden.
Mein Problem ist, das die Zeit die ausgegeben und gespeichert wird vor und nach dem ausführen des Programms gleich ist. Auch bei mehrmaligem durchlaufen der For-Schleife wird immer die gleiche Zeit angezeigt.
Die ausführung des Programms ansich dauert schon mehrere Sekunden bis einige Minuten. Die Meldungen auf der Konsole erscheinen auch wirklich immer vor und nach dem Programmaufruf. Was sit das Problem?

miniversum

Content-ID: 32256

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

Ausgedruckt am: 21.11.2024 um 12:11 Uhr

Dani
Dani 12.05.2006 um 10:18:46 Uhr
Goto Top
Hi,
probiers mal so:
start C:\Programm.exe %%a /wait


Gruß
Dani
Biber
Biber 12.05.2006 um 10:38:14 Uhr
Goto Top
Moin miniversum,

Du hast zwar optisch den Batch auf mehrere Zeilen auseinandergezogen, dennoch ist für den CMD-Interpreter nach wie vor alles eine Programmzeile, was innerhalb der KlammerAuf/KlammerZu-Konstruktion steht.
Das heißt, die Variable %tinme% wird auch einmal aufgelöst, nämlich dann, wenn die For-In-Do-Anweisung mit dem ersten Element losrennt.

Zwei Möglichkeiten:
a)
FOR /F "eol=; tokens=1* delims=" %%a in (Optionen.txt) do call :ThisElement  
goto :eof
:ThisElement FOr-Parmeter %%a kommt als %1 an
echo %%a wird gestartet
echo Option %1: >> %Logfile%
echo %Date%%Time%: Programm gestartet
echo %Date%%Time%: Programm gestartet >> %Logfile%
C:\Programm.exe %1
echo %Date%%Time%: Programm beendet
echo %Date%%Time%: Programm beendet >> %Logfile%
echo.
echo. >> %Logfile%
goto :eof

-oder-
b) Mit DelayedExpansion arbeiten:
Setlocal EnableDelayedExpansion
FOR /F "eol=; tokens=1* delims=" %%a in (Optionen.txt) do (  
echo %%a wird gestartet
echo Option %%a: >> %Logfile%
echo %Date%!Time!: Programm gestartet
echo %Date%!Time!: Programm gestartet >> %Logfile%
C:\Programm.exe %%a
echo %Date%!Time!: Programm beendet
echo %Date%!Time!: Programm beendet >> %Logfile%
echo.
echo. >> %Logfile%
)

(Genau genommen müsstest Du auch jeweils !date! statt %date% schreiben, aber so oft wird der Batch nicht um Mitternacht herum laufen.)

Hope That Helps
Biber
miniversum
miniversum 12.05.2006 um 11:48:45 Uhr
Goto Top
Danke Biber
Das mit dem Setlocal wars!
Hab am Ende noch ein endlocal gesetzt

miniversum