CMD在子目录中删除带有通配符的文件

时间:2017-07-26 18:14:01

标签: cmd wildcard del

如果我想在CMD中这样做

rm D:/archive/*/*2017*

我必须使用什么命令?

我试试这个并不起作用。

del D:/archive/*/*2017*  

我提出的解决方案是,它有效。

cd "D:/archive"
for /F %i in ('dir /AD /B') do del %i\*2017*

如果有人有更简单的解决方案,请建议我。谢谢。

1 个答案:

答案 0 :(得分:0)

通配符(*?)仅在它们出现在路径的 last 元素中时才会被解析,因此没有更简单的解决方案。

您的for /F循环方法甚至不够全面,因为它不安全:

  • cd命令在当前工作目录位于另一个驱动器D:上时不会更改为预期目录,因此缺少/D开关;
  • 特殊字符(例如&^())可能会导致意外行为,因为您没有在所有字符周围加上引号路径;
  • 没有为for /F提供选项字符串,因此它会在第一个空白字符处拆分目录名称,因为delims选项默认为 SPACE 和< kbd> TAB ,由于默认的;选项,它会忽略名称以eol开头的目录;
  • Windows中的路径分隔符是反斜杠\,正斜杠/可能会导致错误;

这是固定代码:

cd /D "D:\archive" & for /F "delims= eol=|" %I in ('dir /B /A:D') do @del "%I\*2017*"

为简化起见,您也可以使用for /D循环代替for /F,因此不再需要cd命令:

for /D %I in ("D:\archive\*") do @del "%~I\*2017*"