2012-09-21 14 views
12

Mam skrypt, który drukuje datę i godzinę, po których następuje ciąg w dzienniku.Drukowanie bieżącej daty i czasu w skrypcie DOS

echo %DATE%_%TIME% Processing %%f >> process.log 

Problem polega na tym, że data i czas są zawsze datą i godziną uruchomienia skryptu. Uruchomiłem skrypt z dnia na dzień i nadal mam tę samą datę i godzinę. Czy istnieje sposób ich aktualizacji, aby wyświetlał bieżącą datę i godzinę, kiedy ciąg jest drukowany w pliku dziennika?

Odpowiedz

32

Fakt, że masz %%f wskazuje, że polecenie echo znajduje się w pętli FOR. Cała pętla FOR jest analizowana od razu, a %DATE% jest rozwijana w czasie analizy. Polecenie nie jest ponownie analizowane dla każdej iteracji, dlatego dla każdej iteracji otrzymuje się taką samą wartość. Otrzymasz wartość, która istniała przed wykonaniem instrukcji FOR!

Rozwiązaniem jest opóźnione rozszerzenie. Umieść setlocal enableDelayedExpansion u góry skryptu. Następnie użyj !DATE!_!TIME! zamiast %DATE%_%TIME%. Opóźnione rozwinięcie oznacza, że ​​rozszerzenie występuje, gdy instrukcja jest wykonywana, a nie podczas jej analizowania. W systemie HELP jest dobre wytłumaczenie. Wpisz HELP SET lub SET /? z wiersza polecenia i poszukaj sekcji dotyczącej opóźnionego rozszerzenia.

Powiązane problemy