使用包含空格的参数安排batch file

我需要在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 

我认为这将是一个报价问题,但我无法弄清楚解决scheme。 如果可能,我不想直接在脚本中插入值

谢谢大家的帮助

不是一个完整的解决scheme,而是一个解决方法,可以让你的任务工作,直到你find一个更好的解决scheme:你可以尝试调用一个batch file,不带参数,除了调用"C:\Program Files\SCRIPT\DeleteFilesOlderThanXDays.cmd" "N:\Program Files\LOG" *.zip 60

谢谢您的回答。 经过进一步的调查后发现,应该修改batch file,在@path周围添加引号以允许空格:

@echo off forfiles -p%1 -s -m%2 -d – %3 -c“cmd / c del / q”@path“”

由于空格,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”

在batch file中,可以在可以包含空格的参数周围添加引号。 所以,至less在%1左右。

 @echo off forfiles -p "%1" -s -m %2 -d -%3 -c "cmd /c del /q "@path""