【发布时间】:2022-01-17 13:12:17
【问题描述】:
这个问题是来自调度程序任务、批处理程序,还是我想使用批处理程序删除它的文件夹中的文件? 这是批处理程序:
forfiles /p "D:\nameOfFolder" /s /m *.* /d -7 /c "cmd /c del @path"
【问题讨论】:
标签: windows batch-file scheduled-tasks delete-file forfiles
这个问题是来自调度程序任务、批处理程序,还是我想使用批处理程序删除它的文件夹中的文件? 这是批处理程序:
forfiles /p "D:\nameOfFolder" /s /m *.* /d -7 /c "cmd /c del @path"
【问题讨论】:
标签: windows batch-file scheduled-tasks delete-file forfiles
将/M *.* 替换为/M * 甚至包括没有扩展名的文件,因为forfiles 对待通配符的方式与大多数其他命令不同。 /M * 甚至可以省略,因为这是默认设置。
考虑到forfiles 会迭代文件和目录,因此您需要排除后者,因为del 可能会尝试删除其内容。因此,基于forfiles 特定变量@isdir 实现条件。
forfiles /S /P "D:\nameOfFolder" /M * /D -7 /C "cmd /D /C if @isdir==FALSE del @path"
作为旁注,切勿将尾部反斜杠附加到(带引号的)路径,因为/P "D:\" 之类的内容会使命令失败,因为\" 构成forfiles 的转义引号,从而破坏了命令行。但是,您可以指定/P "D:\."。
【讨论】:
你确定你有这样的文件吗?
我尝试了以下(非常相似的)命令:
forfiles /p "C:\Temp_Folder" /s /m . /d -7 /c "cmd /c echo @path"
ERROR: No files found with the specified search criteria.
我注意到的一件事是,目录的名称不应以反斜杠结尾:
forfiles /p "C:\Temp_Folder" is working fine.
forfiles /p "C:\Temp_Folder\" is not working.
【讨论】:
. 本身不是提供给/m 的有效搜索掩码。
您需要使用*.*(全部)*.ext(提供的扩展名)*string*.*(名称包含字符串的文件)。? 也支持作为搜索掩码来匹配任何字符。例如:*.?a* 将匹配任何扩展类型以a 作为第二个字符的文件
【讨论】:
*.*,由于代码格式错误,显示为.。但是*.* 不应与forfiles 一起使用,因为这会排除没有扩展名的文件(是的,forfiles 对通配符的处理方式不同)...