假设D:
驱动器中有一些文件夹:
D:\Air
D:\Abonden
D:\All
D:\Whatever
我想删除所有以“A”开头的文件夹(包括所有子文件夹和文件)。我尝试了这个命令:
rmdir D:\A* /s /q
但我收到错误 :(
文件名、目录名或卷标语法不正确。
该del
命令适用于*
,但我还需要删除文件夹。
有没有办法通过该rmdir
命令实现这一点?
答案1
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*
答案2
使用通配符删除文件夹
rmdir
单独的/命令rd
不支持通配符(即*
和?
)。您可以通过将其包装在for
循环中来解决此限制。
示例用法
for /d %G in ("X:\A*") do rd /s /q "%~G"
笔记在删除文件和文件夹时,您可能希望将rd
命令替换为echo
first。这样,您可以确保不应删除的内容实际上会被删除。
多种模式
为了删除符合不同模式的多个文件夹,语法并没有太大不同。正如@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.
进一步阅读
答案3
怎么还没有人告诉 OP 有关 forfiles 的事?!
forfiles /P D:\ /M A* /C "cmd /c if @isdir==TRUE rmdir /s /q @file"
/P 是路径名 - 搜索开始的位置 /M 是搜索掩码,查找以 A 开头的文件 /C 是要执行的命令 /S 是递归子文件夹(这里不包括,因为 op 没有问)
答案4
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”文件中,则需要将“%”字符加倍。