批量删除子文件夹(如果存在)

时间:2016-11-19 14:27:46

标签: batch-file

我需要帮助...我试图简单地删除搜索文件夹(如果批量存在)。

批处理文件:

@for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO @if exist %%i: @for /d /r "%%i:\" %%a in (program\logs\) do if exist "%%a" echo rmdir /s /q "%%a"

但结果不正确

if exist "C:\%i:\program\logs\" echo rmdir /s /q "C:\%i:\program\logs\"

1 个答案:

答案 0 :(得分:1)

for /r的众所周知的错误 - %%a之前提供的目录根可能不是元变量(即来自外循环的控制变量)

可能的解决方法(未尝试)

for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO if exist %%i: call :sub "%%i"
....
goto :eof

:sub
set "targetdir=%~1"
for /d /r "%targetdir%" %%a in (program\logs\) do if exist "%%a" echo rmdir /s /q "%%a"
goto :eof

goto :eof(冒号必需)跳过文件中的其余代码。 CALL子例程提供“%% i”作为子例程:sub的第一个参数(在这种情况下不需要引号 - 但如果传递的字符串包含分隔符)

:sub将变量设置为提供的第一个参数的内容; ~删除了引号。由于批处理将%var%替换为变量的内容作为解析操作的一部分,因此它应该进行适当的替换。

BTW - 批处理开头的@echo off语句使文件中@多余(@表示“执行前不要echo此语句”< / p>