我需要在 Windows Server 2003 中安排一项任务,执行此脚本,删除指定文件夹中超过 n 天的文件。该脚本需要 3 个参数:
%1 path to folder where files need to be deleted
%2 file names (es. *.log)
%3 number of days
@echo off
forfiles -p %1 -s -m %2 -d -%3 -c "cmd /c del /q @path"
如果第一个参数内部没有空格,则脚本可以正常工作。这是有效参数的示例:
"C:\Program Files\SCRIPT\DeleteFilesOlderThanXDays.cmd" N:\FOLDER\FOLDER *.zip 60
这是一个不起作用的例子:
"C:\Program Files\SCRIPT\DeleteFilesOlderThanXDays.cmd" N:\Program Files\LOG *.zip 60
这也不起作用:
"C:\Program Files\SCRIPT\DeleteFilesOlderThanXDays.cmd" "N:\Program Files\LOG" *.zip 60
我认为这可能是引号问题,但我不知道该如何解决。如果可能的话,我不想直接将值插入脚本
谢谢大家的帮助
答案1
这不是一个完整的解决方案,而是一个可能使您的任务继续运行直到您找到更好的解决方案的变通方法:您可以尝试调用一个不接受参数并且只调用的批处理文件"C:\Program Files\SCRIPT\DeleteFilesOlderThanXDays.cmd" "N:\Program Files\LOG" *.zip 60
答案2
谢谢你的回答。经过进一步调查,发现应该修改批处理文件,在@path 周围添加引号以允许空格:
@echo off forfiles -p %1 -s -m %2 -d -%3 -c“cmd / c del / q“@path””
由于有空格,路径参数也必须用引号引起来,如下所示:
“C:\Program Files\SCRIPT\DeleteFilesOlderThanXDays.cmd” “N:\Program Files\LOG” *.zip 60
现在,它也不起作用,因为“C:\Program Files\SCRIPT\DeleteFilesOlderThanXDays.cmd”后跟一个带引号的参数会失败,并出现错误,如“C:\Program 不被识别为内部或外部命令...”所以再也没有运气了。
有效的解决方法:
“C:\Program Files\SCRIPT\DeleteFilesOlderThanXDays.cmd”。*.zip 60
开始于:“N:\Program Files\LOG”
答案3
在批处理文件中,为可包含空格的参数添加引号。因此,至少在 %1 周围添加引号。
@echo off forfiles -p "%1" -s -m %2 -d -%3 -c "cmd /c del /q "@path""