如何创建批处理文件以递归方式删除所有名为`bin`或`obj`的文件夹?


31

我需要删除PC文件夹中的所有binobj文件夹。因此,我正在考虑使用批处理文件来执行此操作,但我对Windows中的批处理文件不满意。请帮忙。

[编辑]

与用户讨论之后DMA57361,我得到了当前的解决方案(尽管仍然有问题,请参阅我们的评论):

创建一个.bat文件,并粘贴以下命令:

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"

要么

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

@ DMA57361:运行脚本时,出现以下错误。任何的想法?

替代文字


@Nam-为什么要运行for \/d \/r ...-为什么使用双斜杠而不是for /d /r ...?最后运行“完整”版本/q(如我所述)会删除所有内容而不会发出警告,因此不会返回任何输出(即,它不会告诉您何时可以使用,只有在出现错误时才可以),您确定第二个运行以上无法正常工作?
DMA57361

@Nam的运行也不相同-在命令开头的图像中,for / %d in 而不是在图像中for /d /r . %d in-您必须使用下面的整个命令,每个位具有不同的功能,这一点很重要。
DMA57361

@Nam Opps,我很抱歉,您完全正确,它不会显示前几个开关!但是,对我来说,它不会引发该错误,并且似乎可以正确运行。您是否尝试过仅从命令行运行命令,而不是尝试从批处理文件中运行命令?
DMA57361

嗯,真奇怪。与我的WinXP相比,您的Win7可能在批处理中做了一些不同的事情,不确定是什么。今天晚上我可以在家里检查Win7,否则恐怕此刻我被困住了……
DMA57361 2010年

实际上,尝试给batch命令加上前缀,start然后看看会发生什么。不理想,但我想知道是否有帮助。
DMA57361 2010年

Answers:


42

以前已经在Stack Overflow上对此进行了回答,这是我从中获得此答案的主要目的所在。

尝试以下命令,您可以从中运行它cmd

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s/q "%d"

如果您需要更改其他文件夹,则只需(bin,obj)在命令中间将新项目添加到集合中即可。

这将删除所有匹配的内容,而不会发出警告,也不会使用回收站 -因此,如果您需要额外的安全保护,/q请将呼叫rd末尾的删除到该位置,系统应在每次删除前询问您。

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s "%d"

如果您打算从一个内部运行命令批处理文件,则需要更换变量的每个实例%d%%d,就像这样:

for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
OR
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

根据转换中的问题评论

如果命令拒绝在批处理文件中运行(无法在此处复制),请尝试在命令前添加前缀start。尽管这将启动与批处理文件并发运行的过程,这可能会导致其他问题,但似乎更可能正常工作。

同样,如果您有名称为的文件,obj或者bin该命令正在使用的文件夹树中,则对于遇到的每个具有匹配名称的文件,您都会收到一条错误消息。这些匹配的文件不会被删除,并且不会妨碍命令删除其应有的内容。换句话说,可以安全地忽略它们。


1
您是否知道如何忽略运行此命令的根文件夹中的一个文件夹?
Goran Obradovic

完美地工作!谢谢!+1
khr055


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.