我有一个每日进程,可以从其他进程创建的文件中生成一些zip文件。我需要创建一个每日日志文件,该文件指示找到的每个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%
)
该文件应该做的简短摘要:
截至目前,日志文件只包含文件名,后跟字符串'[package from]'字符串,但缺少实际日期时间戳
zip文件的解压缩和删除工作完美无缺,它只是没有设置的时间戳。
答案 0 :(得分:3)
您正在设置变量并在同一个块中使用它。这在cmd
中不起作用,因为当语句解析时而不是在执行时,环境变量会被扩展。因此,当循环运行时,所有变量都已被循环前的值替换。
把
setlocal enabledelayedexpansion
在批处理开始时使用!InstallScriptXmlDate!
代替%InstallScriptXmlDate%
。
另一个注意事项:for
完全能够自行迭代文件,您几乎不需要使用dir /b
迭代for /f
输出。事实上,它可以引入可以通过
for %%f in (%VersionDirectory%\Installable\Packages\pattern*.zip)