2012-09-21 85 views
12

我有一個腳本,用於打印日誌中的日期和時間以及字符串。在DOS腳本中打印當前日期和時間

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

問題是日期和時間總是腳本啓動的日期和時間。我一直在一夜之間運行腳本,並且仍然有相同的日期和時間。有沒有辦法更新它們,以便顯示字符串打印到日誌文件時的當前日期和時間?

回答

32

事實上,你有%%f表明你的echo命令是在FOR循環中。整個FOR循環被立即解析,%DATE%在解析時被擴展。該命令不會爲每次迭代重新分析,所以這就是爲什麼每次迭代都會得到相同的值。您將獲得執行FOR語句之前存在的值!

解決方案是延遲擴展。將setlocal enableDelayedExpansion放在腳本的頂部附近。然後使用!DATE!_!TIME!而不是%DATE%_%TIME%。延遲擴展意味着擴展在語句執行時發生,而不是在語法被解析時發生。 HELP系統中有一個很好的解釋。從命令提示符輸入HELP SETSET /?,然後查找處理延遲擴展的部分。