2017-07-26 1189 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*"