2012-07-19 124 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