使用Windows批处理脚本递归删除文件夹

时间:2017-05-12 19:23:28

标签: windows batch-file

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

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

TIA

E.g:

mainfolder
  subfolder1
        source
        example
           test
  subfolder2
       source
       example
           test
  subfolderX
       source
       example

4 个答案:

答案 0 :(得分: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的注释:/ I - 不区分大小写,/ E - 在字符串结尾处匹配

详细的命令描述性摘要:创建目录列表,包括所有子目录,并仅选择以“example \ test”结尾的目录,然后删除每个目录,包括其中的所有文件和子目录。

答案 1 :(得分:1)

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

此方法唯一不方便的是目标文件夹的名称必须作为通配符提供,因此您必须提供一个不包含任何其他不需要的文件夹的名称。如果名称没有使用通配符,则for命令可能包含其他文件夹。

答案 2 :(得分:1)

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

for /D %%d in (mainfolder\*) do if exist "%%d\example\test" rd /s /q "%%d\example\test"

答案 3 :(得分:1)

"chrome_url_overrides" : {
  "newtab": "my-new-tab.html"
}

从提示中直接 - 将每个for /r "c:\sourcedir" /d %a in (*) do if /i "%~nxa"=="test" echo rd /s /q "%a" 加倍以用作批处理行。

根据需要替换%

必需c:\sourcedir只是rd来显示他的脚本打算做什么。测试后删除echo关键字以实际执行删除。