【发布时间】:2019-07-14 15:50:38
【问题描述】:
我在 Windows 批处理文件中使用以下命令在 C:\temp 文件夹中生成一个备份文件。
我不知道为什么不工作并且没有显示任何错误
ECHO OFF
for /f %%a in ('date /t') do set DAY=%%a
SET rarFile=C:\temp\DATA%DAY%Backup.rar
echo
"C:\Program Files\WinRAR\Rar" a -r -df %rarFile% C:\temp\*Backup.bak
【问题讨论】:
-
在脚本顶部打开
ECHO ON并从命令提示符而不是使用鼠标运行脚本。通过编辑将控制台的所有输出复制并粘贴到您的问题中。 -
查看
date /t命令的输出,看看它是否包含Windows 文件名中不允许出现的字符,例如/。然后你可以考虑双引号%rarFile%。 -
为什么要在
DATA和Backup之间的文件名?在使用 Rar/WinRAR 选项-agYYYY-MM-DD(国际日期格式)在文件扩展名之前附加文件名末尾的日期时,您只需要一行使用Rar.exe,就是这样。参见 WinRAR 程序文件目录中的文本文件Rar.txt。这个简单的解决方案也将独立于为运行批处理文件所使用的用户帐户设置的国家/地区。 -
顺便说一句:
for /f %%a in ('date /t') do set "DAY=%%a"和set "DAY=%DAY:/=_%"是获取和格式化当前区域设置日期以在文件名中使用的最糟糕的方法。在后台以for开始一个新的命令进程来执行带有选项/T的命令date,捕获这个输出,用for处理它,将它分配给一个环境变量,然后替换所有/by_在日期字符串中。只需set "DAY=%DATE:/=_%"bycmd.exe已经运行以逐行处理批处理文件,从而可以直接使用%DATE:/=_%来完成完全相同的操作。 -
换句话说,
@"%ProgramFiles%\WinRAR\Rar.exe" a -r -df "C:\Temp\DATA%DATE:/=_%Backup.rar" "C:\Temp\*Backup.bak"是整个批处理文件的单行替换,以及更好的@"%ProgramFiles%\WinRAR\Rar.exe" a -agYYYY-MM-DD -ep1 -r -df "C:\Temp\DATA_Backup_.rar" "C:\Temp\*Backup.bak"存储与模式*Backup.bak匹配的文件,而文件C:\Temp\DATA_Backup_YYYY-MM-DD.rar中没有路径。国际日期格式有一个很大的优势,即按名称排序的带有YYYY-MM-DD的文件名同时按时间顺序排序。
标签: batch-file rar