此批处理文件可用于该任务:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "SettingsFile="
for /F "delims=" %%I in ('dir "D:\TargetFolder\Settings.txt" /A-D-L /B /S 2^>nul') do if not defined SettingsFile (set "SettingsFile=1") else (del "D:\TargetFolder\Settings.txt" /A /F /Q /S >nul 2>nul & goto Continue)
:Continue
endlocal
上面的一个不太紧凑的变体:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "SettingsFile="
for /F "delims=" %%I in ('dir "D:\TargetFolder\Settings.txt" /A-D-L /B /S 2^>nul') do (
if not defined SettingsFile (
set "SettingsFile=1"
) else (
del "D:\TargetFolder\Settings.txt" /A /F /Q /S >nul 2>nul
goto Continue
)
)
:Continue
endlocal
首先,确保环境变量SettingsFile不是偶然定义的。
接下来,命令 DIR 由后台启动的单独命令进程执行,以在 D:\TargetFolder 中搜索名称为 Settings.txt 的文件,并以完整路径输出它们。 DIR 的输出被 FOR 捕获,并在 DIR 找到文件 Settings.txt 时逐行处理。
环境变量SettingsFile 是用一个字符串值定义的,这在第一个文件Settings.txt 上并不重要。如果没有更多文件Settings.txt,则FOR 循环结束而无需执行任何其他操作。
但在第二个文件Settings.txt 上执行命令DEL 删除指定文件夹及其所有子文件夹中的文件Settings.txt。循环被命令 GOTO 激发,以继续在标签 Continue 下方的行上进行批处理文件处理,因为 Settings.txt 的其他出现不再重要,当然在删除所有Settings.txt 成功。
要了解所使用的命令及其工作原理,请打开command prompt 窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。
del /?
dir /?
echo /?
endlocal /?
for /?
goto /?
if /?
set /?
setlocal /?
阅读有关Using command redirection operators 的Microsoft 文档,了解>nul 和2>nul。重定向运算符 > 必须在 FOR 命令行上使用插入符号 ^ 转义,以便在 Windows 命令解释器在执行命令 FOR 之前处理此命令行时解释为文字字符> 在后台启动的单独命令进程中执行嵌入的dir 命令行,cmd.exe /c 和' 中的命令行作为附加参数附加。
有关运算符& 的说明,另请参阅single line with multiple commands using Windows batch file。