在 for 迴圈中將時間寫入文件

在 for 迴圈中將時間寫入文件

在 Windows 2008 中:我嘗試將檔案壓縮並複製到備份伺服器。我使用命令列/批次文件,將結果記錄在日誌文件中,我現在還想記錄時間每個文件循環播放。

backupZipCopy.bat批次檔:

setlocal enabledelayedexpansion
echo starting at %date% %time%>>c:\backup\resuZip.log
d:
cd \myDirectoryToBackup
FOR %%i IN (*.nsf)  DO (
echo %date% %time%>>c:\backup\resuZip.log 
"C:\Program Files\7-Zip\7z.exe"  -bd u "\\backupServer\myBackup\%%~ni.zip" "%%~fi">>c:\backup\resuZip.log
)

我的問題:時間是相同的對於所有批次持續時間(批次的時間)開始了當我期望每個循環中的實時時間時)。我已經指定了 setlocalenabledelayedexpansion ,這沒有幫助(所以我是否需要這個?)。

請注意,這並不能解決我的問題,因為我在每個循環中都需要時間。 NB2 我從視窗調度程式呼叫這個批次。

答案1

問題在於,在該行中(( )區塊被解析為單行),所有%foo%變數在運行循環之前僅計算一次for

enabledelayedexpansion選項幫助。但是,它不會改變常用%foo%變數語法的解析規則。相反,它引入了一種新的—用作!分隔符號。

for %%i in (*.nsf) do (
    echo !date! !time!>> C:\backup\resuZip.log
)

但是,請務必小心,因為延遲擴展發生在%foo%變數擴展之後。因此,如果%變數中包含感嘆號,將會導致意外的輸出。 cmd.exe 解析規則有時會非常痛苦。

我強烈建議您為腳本使用不同的語言。考慮到 PowerShell 是最新 Windows 版本的一部分,並且它具有用於管理各種 Windows Server 元件的工具,它將是一個不錯的選擇。

相關內容