2017-05-12 132 views
0

我有一个文件夹下有多个子文件夹。我想删除子文件夹/示例下的所有测试文件夹。我如何使用Windows批处理脚本执行此操作?请注意,有些中没有测试文件夹。递归删除文件夹使用Windows批处理脚本

我知道如何删除mainfolder/subfolder1/example/test。但我坚持在每个子文件夹下递归删除,即删除mainfolder/*/example/test。

TIA

E.g:

mainfolder 
    subfolder1 
     source 
     example 
      test 
    subfolder2 
     source 
     example 
      test 
    subfolderX 
     source 
     example 
+0

谢谢大家的回答......我选择了这个答案作为答案,我不需要做任何调整就可以实现。 – user1164061

回答

1
for /r "c:\sourcedir" /d %a in (*) do if /i "%~nxa"=="test" echo rd /s /q "%a" 

直接 - 双每个%作为一个使用批次生产线。

取代c:\sourcedir适当

需要rd只是echo版以示他的脚本打算做什么。测试后删除echo关键字以实际执行删除操作。

1

我建议在看ss64.com's CMD.EXE reference,特别是DIRFINDSTRFOR命令。

for /f %i in ('dir /s /a:d /b ^| findstr /i /e "example\test"') do rmdir /s %i 

似乎是您所要求的适当命令。

关于DIR的注意事项:/ S - 子目录,/ A:D - 仅限目录(“属性:目录”),/ B - “光秃秃的”,没有页眉或页脚,只是完整的路径名。

注意事项FINDSTR:/我 - 不区分大小写,/ E - 比赛在结束串

命令的冗长描述摘要:创建一个目录列表,包括所有子目录,并仅选择那些以“example \ test”结尾,然后删除它们中的每一个,包括它们中的所有文件和子目录。

1
for /R "mainfolder" /D %%a in (example\te?t) do rd /S "%a" 

这种方法的唯一不方便的是,目标文件夹的名称必须给予的外卡,所以你必须给,不包括任何其他不需要的文件夹的名称。如果名称没有使用通配符,则for命令可能包含其他文件夹。

1

你只需要通过主目录遍历,并检查您要删除的目录是否存在:

从提示
for /D %%d in (mainfolder\*) do if exist "%%d\example\test" rd /s /q "%%d\example\test" 
相关问题