递归删除所有以...开头的文件夹

12

我需要在一个 .bat 文件中编写一个命令,可以递归删除以特定字符串开头的所有文件夹。如何实现?

5个回答

43

这是你正在寻找的完整答案:

FOR /D /R %%X IN (certain_string*) DO RD /S /Q "%%X"

显然,您需要将certain_string替换为您的文件夹名称。

这个命令是递归删除,可以删除所有的子文件夹和文件。


2
很遗憾,除了@Maorco的答案之外,没有其他方法对我有用。可惜他只有我的一票。 :( - IsmailS
1
谢谢。我必须排除两个目录,结果是这个命令:FOR /D /R %%X IN (*.lproj) DO IF /I "%%~xnX" neq "en.lproj" IF /I "%%~xnX" neq "english.lproj" RD /S /Q "%%~fX"。解释:%%~xnX 等于完整的目录名称。IF /I .. neq "en.lproj" 过滤所有等于 "en.lproj" 的目录(/I = 不区分大小写)。IFs 可以嵌套。最终,我递归删除了所有以 .lproj 结尾的目录,除了 en.lprojenglish.lproj - Rob W

4
如何考虑:
for /d %a in (certain_string*) do rd /s %a

这将在命令提示符中起作用。在批处理文件中,您需要像往常一样将%加倍:

@echo off
for /d %%a in (certain_string*) do rd /s %%a

哎呀,我需要更多睡眠...或者茶...(在桌子上敲了一下头)。 - Joey
嗯,虽然这可能不会递归进入目录树并找到符合条件的更深层文件夹,对吧?(我的解决方案也不会这样做,但我刚意识到这就是 OP 的意思)。 - Joey
我不得不从最初的简单尝试中扩展它,因为 rd 似乎不能自己扩展通配符。 - Greg Hewgill
要递归地查找以某个前缀开头的目录,您可以尝试使用 for /r 或一些组合。 - Greg Hewgill
哦,不好。我也没有尝试过,因为我目前没有任何目录可以破坏 :-) - Joey
@Greg Hewgill:这个方法可行吗?当我尝试删除以“.delme”结尾的目录时,它并不起作用。我按照您的建议尝试了以下命令:for /d %%x in (*.delme) do rd /s /q "%%x",但似乎没有效果。 - Marco Demaio

1

我觉得这还没有完成。如果你的意思是“递归地进入目录层次结构以删除所有以某个字符串开头的文件夹”,那么以下内容可能就足够了:

for /f "delims=" %%x in ('dir /b /ad abc*') do rd /s /q "%%x"

这将递归进入目录树,查找所有以“abc”开头的文件夹,遍历该列表并删除每个文件夹。

也许您需要在rd周围包装一个if exist,具体取决于找到和返回目录的顺序。通常,在同时迭代和更改某些内容时是不明智的,但有时它可以奏效 :-)


1
Rössel:这个有用吗?当尝试删除以“.delme”结尾的目录时,它不起作用。我按照您的建议尝试了以下命令:for /f "delims=" %%x in ('dir /b /ad *.delme') do rd /s /q "%%x" 但似乎没有效果。 - Marco Demaio
2
@Marco: 不需要大声喊叫。如果有疑问,请提出新问题并清晰详细地描述您的问题。像“不起作用”这样的陈述通常是一个糟糕的问题报告。 - Joey
2
Rossel:我并没有大声喊叫,只是用了大写字母。那我现在会提出一个新问题。 - Marco Demaio

0

rm -rf -- "目录名称"

例如:rm -rf -- "-2096378"

以上命令将删除以-或通配符字符开头的文件夹/目录。


-1
FOR /F "tokens=*" %i IN ('DIR **[[SearchTerm]]** /A:D /s /b') do rd /S / Q %i

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接