2012-07-10 32 views
2

我正在嘗試創建具有發生在批處理文件中的事件時間戳的日誌文件。正確標記由批處理腳本創建的日誌文件

正如你可以從下面的代碼看到的,我不是專家編寫批處理文件。該過程儘可能地運作,雖然技術很差。爲了保持批處理文件不被刪除,我將它設置爲只讀。我會仔細研究如何在某個時候排除批處理文件。現在,這並不重要。

@echo off 
echo Compressing Files... 
echo Compression Batch File STARTED: %date% %time% >> c:\temp\backup-compress.log 
echo --------------------------------------------- >> c:\temp\backup-compress.log 
for %%X in (*) do ( 
    "c:\Program Files\7-Zip\7z.exe" a -tgzip "%%X.gz" "%%X" 
    echo %%X Compressed: %date% %time:~-11,8% >> c:\temp\backup-compress.log 
    echo Deleting: %%X 
    del "%%X" 
    echo %%X Deleted: %date% %time:~-11,8% >> c:\temp\backup-compress.log 
    ) 
echo Moving compressed copies to Compressed Backups folder... 
move *.gz "Compressed Backups\" > NUL 
echo --------------------------------------------- >> c:\temp\backup-compress.log 
echo Compression Batch File FINSHED: %date% %time% >> c:\temp\backup-compress.log 
echo Compression completed successfully... 
echo 

生成的日誌文件看起來完全如我所願,但時間戳和日期在整個日誌中保持不變。當批處理文件中發生事件時,而不是更新的時間戳,我只能看到批處理文件的時間和日期,而不是每個%time%和%date%實例。

如何解決此問題並查看我正在創建的日誌文件的正確時間和日期戳記?

PS:原諒我這篇文章的長度和可能是一個簡單的問題來解決。另外,如果標籤不完全正確,我很抱歉,這是我第一次真正發佈一個問題,儘管該網站一直是一個很好的答案資源。

回答

4

這是因爲cmd擴展變量時,語句是解析不是直接執行之前。這種情況下的陳述是完整的for,包括後面的塊。因此,在for循環內的所有內容都是文字字符串,沒有變量。

您可以使用延遲擴展來糾正問題。把下面的批處理的開始:

​​

然後用!date!!time!內環路。這將在執行語句之前擴展變量,從而按預期工作。

+0

謝謝!那就是訣竅。我不得不承認,我在我的一些搜索結果中看到了這一點,但是我不知道爲了!工作,我必須有setlocal enabledelayedexpansion線。我之前試過並打印過!日期!和!時間!遍佈日誌文件。 我很感激幫助。 – 90civichb 2012-07-10 21:50:29

0

我使用一點點不同的方法獲得適當的時間,因爲我不在乎毫秒。

我把我的時間是這樣的:

FOR /F %%A IN ('TIME/T') DO SET timeEdit=%%A 
ECHO %timeEdit% 

這樣,我得到的時候,我想要的方式,唯一的區別就在於,這是一個有點比SETLOCAL方法更長。如果您想多次捕獲,您將需要兩條線,因爲您正在爲Time設置一個變量,而不是實時捕獲系統中的時間。

相關問題