【问题标题】:Use 7zip to include files with *current date* only使用 7zip 仅包含 *current date* 的文件
【发布时间】:2014-08-16 00:00:31
【问题描述】:

我正在创建然后用 7-zip 压缩一个带有当前日期标记的文件。我可以使用以下开关来创建要添加到的 zip 文件:

7z -tzi C:\RACHAEL\my_work\dbs\MyDb\%DATE:~11,4%\%DATE:~5,2%\MyDb_bak_%DATE:~11,4%-%DATE:~5,2%-%DATE:~8,2%.bak.zip 

但添加“-i!”命令找不到指定的文件

 7z -tzi C:\RACHAEL\my_work\dbs\MyDb\%DATE:~11,4%\%DATE:~5,2%\MyDb_bak_%DATE:~11,4%-%DATE:~5,2%-%DATE:~8,2%.bak.zip -i!C:\RACHAEL\my_work\dbs\MyDb_bak_<get_current_date_in_correct_format>.bak 

如何从批处理文件中找到包含当前格式化日期的目录中的文件?有转义字符吗? '%' 在 7zip 中没有提供这个目的,我认为它会。

提前致谢!

【问题讨论】:

    标签: batch-file 7zip


    【解决方案1】:
     forfiles /d +0 /c "cmd /c echo @path"
    

    forfiles /?

    【讨论】:

      【解决方案2】:

      环境变量DATE的日期字符串格式取决于Windows的语言设置。

      在德语 Windows XP 上使用以下 2 行执行批处理文件

      @echo %DATE%
      @echo %DATE:~6,4%-%DATE:~5,2%-%DATE:~8,2%
      

      输出结果

      16.08.2014
      -.2-14
      

      这不是 YYYY-MM-DD 格式的有效日期字符串,正如您在命令中显然想要的那样。

      我需要将第二行改为

      @echo %DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%
      

      在命令提示符窗口中运行批处理文件时获得输出

      16.08.2014
      2014-08-16
      

      上述日期字符串提取子串的解释:

      %DATE:~6,4% ... 从环境变量 DATE 的字符串中提取从第七个字符开始的四个字符。第一个字符的字符索引为 0。

      %DATE:~3,2% ... 从环境变量DATE的字符串中提取从第四个字符开始的两个字符。

      %DATE:~0,2% ... 从环境变量 DATE 的字符串中提取从第一个字符开始的两个字符。

      现在您知道命令中的日期子字符串提取代码的作用了。您还可以看到如何使用从命令提示符窗口中执行的小批处理文件验证子字符串提取代码的输出,或者在使用命令pause 附加第三行以查看输出后从 Windows 资源管理器中执行。

      这应该可以帮助您根据请求的日期格式在您的计算机上找到正确的日期字符串代码,具体取决于环境变量 DATE 的日期字符串格式。

      字符! 在批处理文件中具有特殊含义,因为它用于引用具有延迟扩展的环境变量的值。要将其解释为批处理文件中的文字字符,必须使用 ^ 对其进行转义,这意味着将字符 ^ 左移到 ^ 导致 ^!

      因此命令

      7z.exe a -tzip C:\RACHAEL\my_work\dbs\MyDb\%DATE:~11,4%\%DATE:~5,2%\MyDb_bak_%DATE:~11,4%-%DATE:~5,2%-%DATE:~8,2%.bak.zip -i^!C:\RACHAEL\my_work\dbs\MyDb_bak_%DATE:~11,4%-%DATE:~5,2%-%DATE:~8,2%.bak
      

      可能是您计算机上批处理文件中的正确文件。

      但在德语 Windows XP 上,正确的命令是:

      7z.exe a -tzip C:\RACHAEL\my_work\dbs\MyDb\%DATE:~6,4%\%DATE:~3,2%\MyDb_bak_%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%.bak.zip -i^!C:\RACHAEL\my_work\dbs\MyDb_bak_%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%.bak
      

      最后一点:在批处理文件中,通常最好用完整路径指定可执行文件。因此,最好在这里不仅指定7x.exe,还指定"C:\Program Files\7-Zip\7z.exe" 之类的内容。 7x.exe 的路径在您的计算机上可能不同。

      【讨论】:

      • 感谢您提供非常全面的答案,但我认为您没有正确阅读我的问题。这些都不适用于我的任何误解。我立即声明我能够成功创建压缩目录,以使用我提供的日期格式将现有文件添加到使用 7zip)。在您的-i^! 声明中看到转义字符(尽管我不明白您对转义插入符的位置)确实帮助我找到了正确的答案。我不能投票给你,因为你的回答(在我看来)非常不相关。
      • 在所有语言中,转义字符必须插入字符的左侧而不是右侧,请参阅How can I escape an exclamation mark ! in cmd scripts? 我详细解释了日期字符串的构建,因为环境变量 DATE 在我的计算机上与您的计算机上显然包含完全不同的字符串,并且您还没有编写日期字符串在您的 PC 上的外观。但是,由于某些未知原因,您的命令会在 ! 之后插入 ^,这是这里唯一重要的事情。
      【解决方案3】:

      在我尝试添加到使用 7zip 创建的成功压缩目录的路径之前缺少转义字符 ^

      这是更正的陈述:

      echo Using 7-zip to compress today's backup folder...
      7z a -tzip C:\RACHAEL\my_work\dbs\MyDb\%DATE:~11,4%\%DATE:~5,2%\MyDb_bak_%DATE:~11,4%-%DATE:~5,2%-%DATE:~8,2%.bak.zip -i!^C:\RACHAEL\my_work\dbs\MyDb\%DATE:~11,4%\%DATE:~5,2%\MyDb_bak_%DATE:~11,4%-%DATE:~5,2%-%DATE:~8,2%.bak
                                                                                                                               ^missing escape character right here so that path could actually be parsed per date format.       
      

      【讨论】:

        猜你喜欢
        • 2017-02-05
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        • 2015-11-20
        • 1970-01-01
        • 1970-01-01
        • 2013-08-19
        • 2013-03-02
        相关资源
        最近更新 更多