2017-07-26 1182 views
0

如果我想这样做,在CMDCMD删除文件用通配符子目录

rm D:/archive/*/*2017* 

我必须使用什么命令?

我试试这个,它不起作用。

del D:/archive/*/*2017* 

我想出的解决方案是,它的工作原理。

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

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

回答

0

通配符(*?),当他们出现在路径的最后元素只解决了,所以没有一个简单的解决方案这一点。

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

  • 在当前工作目录是另一个驱动器,但D:cd命令不会改变为预期的目录,所以/D开关丢失;
  • 特殊字符(例如&,^,(,))可能会导致意外的行为,因为您没有在所有路径上加引号;
  • 没有提供for /F没有选项字符串,所以它会在第一空白字符由于delims选项默认为SPACETAB分裂目录名称,它会忽略的目录名称开头;由于默认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*"