通过rmdir或rd命令使用通配符


40

假设D:驱动器中有一些文件夹:

D:\Air
D:\Abonden
D:\All
D:\Whatever

我想删除所有以“ A”开头的文件夹(包括所有子文件夹和文件)。我尝试了以下命令:

rmdir D:\A* /s /q

我收到一个错误,但是:(

文件名,目录名称或卷标签语法不正确。

del命令适用于*,但我也需要删除文件夹。
有没有办法通过rmdir命令来实现?


2
在Windows或DOS命令外壳的开发中,统一性和常识从未发挥作用。可悲的是,当开发这些外壳时,就会出现模型系统,这些模型系统将有助于智能设计。当然,shell只是将这些垃圾打成一片的可怕的,甚至不存在的思维过程的一个例子-我希望我能告诉你我的真实想法,哈哈。
里克·奥谢

Answers:


33
cd c:\temp
for /f %i in ('dir /a:d /s /b A*') do rd /s /q %i

使用此来测试:

for /f %i in ('dir /a:d /s /b A*') do echo rd /s /q %i

这将把要运行的命令输出到命令提示符中,并允许您查看发生了什么。

请记住,这还将搜索子文件夹,例如“ C:\ temp \ jjj \ aaa”,并将删除aaa文件夹。如果只希望查看顶级文件夹“ C:\ temp \ aaa”,"/s"则从命令中删除。

关键在于A *,您可以在其中输入搜索字符串。这将接受通配符,如aaa*aaa**aaa*如果你想让它。


照原样,如果路径/文件夹名称包含空格字符,该命令将中断。
and31415 2014年

1
我们可以为A *添加“ IF NOT EXIST goto EFO”吗?
serdar 2014年

3
如果路径包含空格字符,则此方法有效:/ f“ delims =”%i in('dir / a:d / s / b A *')do rd / s / q“%i”
Luis Cantero-MSFT

5
我只想补充一点,如果从批处理文件中运行此命令,则需要使用两个百分号,因此命令变为for /f %%i in ('dir /a:d /s /b A*') do rd /s /q %%i
Fred Clausen

不需要使用标志'w / sub'两次:)
lunicon

25

使用通配符删除文件夹

单独的rmdir/ rd命令不支持通配符(即*?)。您可以通过将其包装在for循环中。

用法示例

for /d %G in ("X:\A*") do rd /s /q "%~G"

注意:在删除文件和文件夹时,您可能希望将rd命令替换为echo要先。这样,您可以确保实际上不应删除的所有内容。

多种模式

为了删除匹配不同模式的多个文件夹,语法没有太大不同。正如@dbenham正确指出的那样,单行命令就足够了。您还可以指定不同的路径:

for /d %G in ("X:\A*","Y:\Whatever\B*","Z:\C?D") do rd /s /q "%~G"

奖励-检查文件夹是否存在

如果要检查特定文件夹是否存在,可以使用以下命令:

dir /b /a:d "X:\A*" >nul 2>&1 && echo Folders exist. || echo No folders found.

进一步阅读


我们可以为A *添加“ IF NOT EXIST goto EFO”吗?
serdar 2014年

例如,我们假设没有以A字母开头的文件夹。因此,命令必须用于B *。我不知道我是否可以解释:(
serdar 2014年

1
向我+1。我不明白这次的否决票。尽管您可以使用简单FOR /DFOR /D /R命令执行多种模式。只需使用in( "A*" "B*" "C?D" )
dbenham 2014年

1
实际上,您确实需要此/R选项,因为与掩码匹配的子文件夹可能在父文件夹下。
dbenham 2014年

5
警告:如果你想在一个.bat文件来使用此解决方案,您必须使用%%摹代替%G,看这里
ValarDohaeris

18

还没有人告诉OP关于文件的信息吗?

forfiles /P D:\ /M A* /C "cmd /c if @isdir==TRUE rmdir /s /q @file"

/ P是路径名-搜索开始的位置
/ M是搜索掩码,查找以A开头的文件
/ C是要执行的命令
/ S是递归子文件夹(此处未包含,因为op没有询问)

2
这是一个很好的答案,应该被接受。
eacousineau 2015年

1
很好的解决方案,并得到了很好的解释。
安德里亚斯(Andreas)

有用的答案:D但IMO for /dand31415的答案更干净,更有效。
Superole

12

adn31415答案是正确的,但是如果将其放在批处理或cmd脚本中会中断。我敲了几个小时,直到我弄清楚了这是你的用法。

在DOS命令窗口中:

for /d %G in ("X:\A*") do rd /s /q "%~G"

在批处理或cmd脚本中:

for /d %%G in ("X:\A*") do rd /s /q "%%~G"

如果要将其放入“ .bat”或“ .cmd”文件中,则需要将“%”字符加倍。


3
您为批处理脚本节省了我的时间!
Tuan

没问题的家伙:)这就是为什么发布答案的原因,因为我知道答案并不明显,而且还会有更多人加入。
山姆B

我们可以添加一个不删除的排除项吗?
serdar '16

SET / P PC =在(“ \\%PC%\ D $ \ A *。*”)中为/ d %% a输入IP或主机名做rd / s / q“ %% a”该脚本是否正常工作?
serdar '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.