我正在创建然后用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
如何在批处理文件中查找包含当前格式化日期的目录中的文件?有逃脱角色吗? &#39;%&#39;在7zip中没有提供这个目的,我认为它会。
提前致谢!
答案 0 :(得分:0)
forfiles /d +0 /c "cmd /c echo @path"
请参阅forfiles /?
答案 1 :(得分:0)
环境变量 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
的路径可能与您的计算机不同。
答案 2 :(得分:0)
缺少转义字符^
。
这是更正后的陈述:
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.