2012-07-19 63 views
2

我有一個每日進程,可以從其他進程正在創建的文件中生成一些壓縮文件。我需要創建一個每日日誌文件,該日誌文件指出所找到的每個zip文件的一個特定文件的內容的時間戳。批處理文件,用於解壓縮文件並獲取壓縮文件內容的時間戳

我創建瞭如下的批處理腳本這似乎我的測試系統上昨日工作,但現在不是了今天,不知道爲什麼......

set VersionDirectory=C:\Test\VersionX\ 
set ResultOutputFile=C:\Test\LogFile.txt 

for /f %%f in ('dir /b %VersionDirectory%\Installable\Packages\pattern*.zip') do (
    mkdir %temp%\%%f\ 
    unzip -extract -dir %VersionDirectory%\Installable\Packages\%%f %temp%\%%f\ > nul 
    for %%a in (%temp%\%%f\InstallScript.xml) do set InstallScriptXMLDate=%%~ta 
    rmdir /s /q %temp%\%%f\ 
    echo  %%f [package from %InstallScriptXMLDate%] >> %ResultOutputFile% 
) 

什麼這個文件是應該做簡短總結:

  1. 循環每一個圖案*用C zip文件:\測試\ VersionX \目錄
  2. 解壓縮此文件以%TEMP%\ %%˚F目錄(其中%% f是文件名)
  3. 獲取%temp%\ %% f \ InstallScript.xml的時間戳並將其放入%InstallScriptXMLDate%變量中
  4. 刪除%temp%\ %% f目錄
  5. 回顯文件名(%% f)和時間戳(%InstallScriptXMLDate%)記錄到日誌文件

就像現在的日誌文件只包含文件名,然後是字符串「[包從]」字符串,但缺少實際日期戳

解壓縮和刪除zip文件的工作完美無缺,只是沒有設置時間戳。

回答

3

您正在設置一個變量並在同一個塊中使用它。這在cmd中不起作用,因爲當語句被解析爲時,環境變量被擴展不在執行時。因此,當循環運行時全部變量已被它們在之前的值替換爲循環。

​​

你批的啓動和使用!InstallScriptXmlDate!代替%InstallScriptXmlDate%

另一個說明:for是完全有能力自己遍歷文件,你幾乎不需要遍歷dir /b輸出與for /f。事實上,它可以引入可以避免的問題,可以用

for %%f in (%VersionDirectory%\Installable\Packages\pattern*.zip) 
+0

謝謝!通過刪除for循環中的dir/b命令解決了我的問題,並改進了我的腳本! – Alex 2012-07-19 12:54:22