1

次のバッチ ファイルに問題があります。最初の実行では、ファイルに日付が正しく出力されません。最初の実行で、次の結果が得られます。

*Start of batch file ~4,2dt:~6,2dt:~2,2dt:~8,2dt:~10,2* 
*End of batch file ~4,2dt:~6,2dt:~2,2dt:~8,2dt:~10,2*

次回の実行では正常に動作します:

*Start of batch file 10/18/13 06:46*
*End of batch file 10/18/13 06:46*

注意すべきことの 1 つは、最初の実行時にログ ファイルが存在しなかったため、それに関連している可能性があるということです?!?!?

ここに私のバッチファイルがあります:

set logFile=C:\log.txt
echo %logFile%

REM Get the Start Date and Time and Parse it out
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a 
set start=%dt:~4,2%/%dt:~6,2%/%dt:~2,2% %dt:~8,2%:%dt:~10,2%

ECHO Start of batch file %start% >>%logFile%
REM Run some procedure

REM Get the End Date and Time and Parse it out
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a 
set end=%dt:~4,2%/%dt:~6,2%/%dt:~2,2% %dt:~8,2%:%dt:~10,2%

ECHO End of batch file %end% >>%logFile%

どんな助け/提案も大歓迎です。

4

1 に答える 1

2

For ステートメントの内容は実行前に展開されるため、最初は dt は空です。

バッチ ファイルの先頭に「setlocal ENABLEDELAYEDEXPANSION」を追加します。% も ! に置き換えます。dt のすべての展開に対して。したがって、セットの開始文字列と終了文字列は "!dt:~4,2!/!dt:~6,2!/!dt:~2,2! !dt:~8,2!:!dt:~10, 2!」

「set /?」を実行して、「set」ヘルプを参照してください。

SETLOCAL と ENABLEDELAYEDEXPANSION の仕組みを参照してください。

于 2013-10-18T13:18:12.627 に答える