gpt4 book ai didi

command-line - 用于循环的批处理文件以解压缩文件并获取 zip 文件内容的时间戳

转载 作者:行者123 更新时间:2023-12-04 05:38:45 29 4
gpt4 key购买 nike

我有一个日常进程,它从其他进程创建的文件中生成一些 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%
)

这个文件应该做什么的简短摘要:
  • 循环遍历 C:\Test\VersionX\目录中的每个模式*.zip 文件
  • 将此文件解压缩到 %temp%\%%f 目录(其中 %%f 是文件名)
  • 获取 %temp%\%%f\InstallScript.xml 的时间戳并将其放入 %InstallScriptXMLDate% 变量
  • 删除 %temp%\%%f 目录
  • 将文件名 (%%f) 和时间戳 (%InstallScriptXMLDate%) 回显到日志文件中

  • 截至目前,日志文件仅包含文件名,后跟字符串 '[package from ]' 字符串,但缺少实际日期时间戳

    zip 文件的解压缩和删除工作完美无缺,只是没有设置时间戳。

    最佳答案

    您正在设置一个变量并在同一块中使用它。这在 cmd 中不起作用因为在解析语句时而不是在执行时扩展环境变量。因此,当循环运行时,所有变量都已被替换为它们在循环之前的值。


    setlocal enabledelayedexpansion

    在您的批次开始时使用 !InstallScriptXmlDate!而不是 %InstallScriptXmlDate% .

    另注: for完全有能力自己迭代文件,你几乎不需要迭代 dir /b输出 for /f .事实上,它可以引入可以避免的问题
    for %%f in (%VersionDirectory%\Installable\Packages\pattern*.zip)

    关于command-line - 用于循环的批处理文件以解压缩文件并获取 zip 文件内容的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11560941/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com