2013-10-18 44 views
1

我遇到了以下批處理文件的問題。首次運行時,它不會在文件中正確輸出日期。在第一次運行時,我得到以下:Windows批處理文件中的日期解析

*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* 

有一點要注意的是,日誌文件沒有在第一次運行存在,所以它可能是與此相關?!?!?

這裏是我的批處理文件:

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% 

任何幫助/建議將不勝感激。

回答

2

For語句的內容在執行前被擴展,因此dt首先是空的。

將「setlocal ENABLEDELAYEDEXPANSION」添加到批處理文件的頂部。 也用%替換%!爲你所有的擴展dt。 因此,設定的開始和結束字符串變成「!dt:〜4,2!/!dt:〜6,2!/!dt:〜2,2!!dt:〜8,2!:!dt:〜10 2!」

通過運行「set /?」來查看「set」幫助。

請參閱How do SETLOCAL and ENABLEDELAYEDEXPANSION work?

+0

感謝您的建議。你能說清楚你的意思嗎:「也用%代替%所有擴展的dt」 –

+0

所以設置的開始和結束字符串變成「!dt:〜4,2!/!dt:〜6,2!/! dt:〜2,2!!dt:〜8,2!:!dt:〜10,2!「 –

+0

工作很好!謝謝! –