环境变量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 的路径在您的计算机上可能不同。