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

Nam*_* VU 32 windows-7 command-line batch-file

我需要删除PC 上某个文件夹中的所有bin&obj文件夹。所以,我正在考虑一个批处理文件来做到这一点,但我不熟悉 Windows 中的批处理文件。请帮忙。

[编辑]

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

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

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

或者

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

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

替代文字

DMA*_*361 43

之前已经在 Stack Overflow上回答了这个问题,这是我从这里得到这个答案的主要内容的地方。

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

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

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

这将在没有警告的情况下删除所有匹配的内容,并且不使用回收站- 因此,如果您想要一点额外的安全,/qrd在最后删除调用,系统应该在每次删除之前询问您。

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s "%d"
Run Code Online (Sandbox Code Playgroud)

如果您打算从一个内部运行命令批处理文件,则需要更换变量的每个实例%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"
Run Code Online (Sandbox Code Playgroud)

根据问题评论中的转换

如果命令拒绝在批处理文件中运行(无法在此处复制),请尝试在命令前加上start. 虽然这将启动与批处理文件同时运行的进程,这可能会导致其他问题,但它似乎更有可能正常工作。

此外,如果您有已命名的文件objbin在命令正在处理的文件夹树中,那么您将收到针对遇到的每个具有匹配名称的文件的错误消息。这些匹配的文件不会被删除,也不应该妨碍命令删除它应该删除的内容。换句话说,它们可以被安全地忽略。