2014-10-09 122 views
3

我正在尝试编写一个简单的批处理文件,它将递归地查找和删除文件夹。但是下面的脚本不在子文件夹下查看。想知道如何做到这一点?使用批处理文件递归地查找和删除文件夹

@echo off 
cd /d "C:\" 
for /d %%i in (temp) do rd /s "%%i" 
pause 

谢谢!

+0

递归rd选项使用大写'S'。这在你的脚本中看起来像是一个小写的''。 – neilh 2014-10-09 16:36:46

+0

@neilh:除非命令使用大写和小写来表示不同的东西,否则小写字母可以在大多数DOS/Windows命令下正常工作。在'rd'的情况下,两种情况都是一样的。 – 2014-10-09 16:41:39

+0

谢谢你们,但试过大写字母(S)和大写字母(RD)都没有帮助.. – rasuajak 2014-10-09 16:49:13

回答

8
for /d /r "c:\" %%a in (temp\) do if exist "%%a" echo rmdir /s /q "%%a" 
c:\测试用于 temp文件夹的存在

对于每个文件夹(/d),递归(/r),并且如果它存在,删除它

目录去除命令仅呼应到控制台。如果输出正确,请删除echo命令

+0

谢谢MC,我认为这是工作,但小呃。当我运行以下命令:@echo off cd/d“C:\” for/d/r“c:\”%% a in(temp1 \)do if exists“%% a”echo rmdir/S/Q“%% a” pause – rasuajak 2014-10-09 17:19:52

+0

谢谢MC,我认为这是工作,但小呃。当我运行以下内容: @echo off for/d/r“c:\”%% a在(temp1 \)中如果存在“%% a”echo rmdir/S/Q“%% a” 它只是模拟而不是deletig所述的 “TEMP1” 的文件夹,其是在c: 输出: C:\> C:\ TestScripts \好\工作\ find_delete_temp_workarea.bat 命令rmdir/S/Q“ c:\ temp1 \“ rmdir/S/Q”c:\ test3 \ temp1 \“ rmdir/S/Q”c:\ tmp \ temp1 \“ – rasuajak 2014-10-09 17:27:53

+1

@rasuajak,首先阅读答案的最后一行。其次,将结尾反斜杠保留在文件夹的名称中以避免“if exists”可能与具有相同名称的文件相匹配 – 2014-10-09 17:30:10

0

/S开关rd意味着

/S  Removes all directories and files in the specified directory 
     in addition to the directory itself. Used to remove a directory 
     tree. 

这并不意味着它会搜索所有目录具有指定名称寻找一个和删除它们。

换句话说,如果从C:\Temp文件夹运行rd /S Test,它会删除C:\Temp\Test\*.*,包括C:\Temp\Test(任何名称)的所有子目录。它确实会删除C:\Temp\AnotherDir\Test,因为这不是C:\Temp\Test的子文件夹。

+0

感谢但在上面的例子中,如果我从C:\而不是C运行“rd/S Test” :\ Temp,是不是所有在C:\下的“Test”文件夹的getrid? – rasuajak 2014-10-09 17:06:13

+0

然后,它会删除'C:\ Test \ *。*'和子文件夹,但不会删除'C:\ Dummy \ Test \',就像我所说的那样。 :-) – 2014-10-09 18:47:04

相关问题