我遇到了一个我无法理解的问题所以我希望将它放在StackNetwork的正确部分。
我有一个批处理文件。
它转储数据,压缩文件,然后删除刚刚压缩的源文件夹。
以下是最后的步骤
CD "C:\Backup\%DATE%\"
REM ----- NOW ZIP THE FILE AND DELETE THE SOURCE -----
"C:\Program Files\WinRAR\WinRAR.exe" a -r -afzip "C:\Backup\%DATE%.zip"
CD "C:\BackUp\"
RMDIR /s /q "C:\BackUp\%DATE%\"
这行代码删除文件夹。
RMDIR /s /q "C:\BackUp\%DATE%\"
问题是:
当我手动执行计划任务时,通过右键单击任务并选择RUN
,批处理文件运行良好并最终删除文件夹。
但是当任务在晚上自动运行时,一切顺利,除外,文件夹不会被删除。
我认为这与私有有关,因为当我手动RUN
任务时它确实有效,但有趣的是,正在批处理文件中创建文件夹%DATE%
。
即使用户已登录,任务也会设置为以最高权限运行。
答案 0 :(得分:6)
在我撰写有关目录删除失败的可能原因的想法之前,我建议在批处理文件中使用:
RMDIR /s /q "C:\BackUp\%TODAY%\" 2>"C:\BackUp\RemoveDirError.log"
在下一次计划任务运行后查看"C:\BackUp\RemoveDirError.log"
,其中应包含错误消息,希望有助于找到删除目录失败的原因。
环境变量 DATE 的值始终是当前日期。
如果批处理文件在午夜执行,则批处理文件开头的 DATE 值将与批处理文件末尾的值不同。
示例:
批处理文件每天23:30:00启动,需要50分钟才能完成。
执行时的批处理代码就是这种情况,例如:
CD "C:\Backup\2014-09-08\"
REM ----- NOW ZIP THE FILE AND DELETE THE SOURCE -----
"C:\Program Files\WinRAR\WinRAR.exe" a -r -afzip "C:\Backup\2014-09-08.zip"
CD "C:\Backup\"
RMDIR /s /q "C:\Backup\2014-08-10\"
注意:日期字符串的格式取决于日期的Windows语言设置。
结果是错误消息:
系统找不到指定的文件。
此问题的解决方案是将 DATE 的值分配给批处理文件开头的新变量,并在整个批处理文件中引用此变量而不是 DATE 。
set TODAY=%DATE%
CD "C:\Backup\%TODAY%\"
REM ----- NOW ZIP THE FILE AND DELETE THE SOURCE -----
"C:\Program Files\WinRAR\WinRAR.exe" a -r -afzip "C:\Backup\%TODAY%.zip"
CD "C:\BackUp\"
RMDIR /s /q "C:\BackUp\%TODAY%\"
环境变量 TODAY 在此处包含在执行批处理文件期间绝对不会更改的日期字符串。
另一个问题可能是 WinRAR 是Windows应用程序而不是控制台应用程序,因此可以在与批处理文件并行执行的单独进程中执行C:\BACKUP\%DATE%\
作为当前工作目录
在这种情况下,批处理作业将在字符串 WinRAR 之后立即继续执行,这就是Windows阻止删除目录的原因。
解决方案是使用带有选项start
的命令/wait
强制运行 WinRAR 作为单独的进程,但停止批处理作业的执行,直到 WinRAR 在完成压缩后终止了自己。
set TODAY=%DATE%
CD "C:\Backup\%TODAY%\"
REM ----- NOW ZIP THE FILE AND DELETE THE SOURCE -----
start "Backup Compression" /wait /min "C:\Program Files\WinRAR\WinRAR.exe" a -r -afzip "C:\Backup\%TODAY%.zip"
CD "C:\BackUp\"
RMDIR /s /q "C:\BackUp\%TODAY%\"
但这很可能不是原因,因为在这种情况下,删除文件夹也会在手动运行计划任务时失败。
WinRAR 可能会在压缩过程中检测到问题,并打开一个消息提示,其中包含用户要回答的问题。正如计划任务执行没有人回答它一样, WinRAR 持续压缩很长时间。
解决方案是在批处理文件中将-y
添加到 WinRAR 命令行。
start "Backup Compression" /wait /min "C:\Program Files\WinRAR\WinRAR.exe" a -r -afzip -y "C:\Backup\%TODAY%.zip"
我认为,这不太可能不删除目录。
我没有更多的想法。我们需要看到完整的批处理文件代码,如果上面没有任何内容有助于找到在运行批处理文件时删除目录时出错的原因,作为自动执行的计划任务。