【发布时间】:2021-04-06 09:12:27
【问题描述】:
我正在尝试使用批处理文件删除子文件夹。 我有文件夹
- c:\users\mis
- c:\users\mis\A\第三方日志
- c:\users\mis\B\第三方日志
- c:\users\mis\C\第三方
- c:\users\mis\D\第三方
等等。 我想删除所有“第三方日志”文件夹,我厌倦了如下:
@echo off
Set MainFolder=C:\users\mis
FOR /D %%D IN ("%MainFolder%\*") DO CALL :RENAME %%D
pause & exit
REM -------------------------------------------------------
:RENAME
Set CRITERIA=Third Party Log
FOR /D %%R IN ("%1\%CRITERIA%") do @if exist "%%R" rd /s /q "%%R"
REM -------------------------------------------------------**
如果文件夹只有第三个,它正在删除。请帮我删除文件夹。
谢谢,
【问题讨论】:
-
我自己不会执行这样的任务,我可能会考虑这样的事情,
@For /D %%G In ("C:\Users\mis\*")Do @RD /S/Q "%%g\Third Party Log" 2>NUL,或者这个,@For /D /R "C:\Users\mis" %%G In ("Th?rd Party Log")Do @RD /S/Q "%%G",而不是。但是,在您的代码中,我建议您要么将:RENAME %%D更改为:RENAME "%%D",将%1更改为%~1,要么将%1更改为%*; (我建议你选择前者). -
除了修正我的错字,在第一个例子中,(
%%g应该是%%G),我能看到这种行为的唯一充分理由是您尝试删除的目录不是您的。或者更准确地说,您没有删除它们的必要权限。如果您使用的是第一个示例,并修复了错字,您还可以从末尾删除2>NUL以输出任何错误消息。 -
嗨@Compo 它现在正在工作。是的 %%g 与众不同。非常感谢。你拯救了我的一天。度过美好的一天,保持安全。
-
在您的(过于复杂的)代码中,您需要使用
call :RENAME "%%~D"之类的引号,并将%1替换为%~1和"%%R"替换为"%%~R"...
标签: batch-file filenames subdirectory delete-file