使用bat脚本删除除一个文件循环外的所有文件

Delete all but one file loop with bat script

我在批处理文件中有一个循环,用于删除目录中除一个文件外的所有文件 (Windows 7)。但它挂断了,因为它仍然向屏幕发送命令,即使我认为我已经抑制了它。这是我正在使用的命令:

for %i in (*) do if not %i == UPDATE.BAT del /s %i >nul 2>&1

测试了我的批处理脚本,日志显示它在这个命令处停止。在命令行测试命令,将 "del /s file.ext >nul 2>&1" 命令输出到目录中每个文件的提示符,这就是导致我的批处理文件挂起的原因。

这里需要改什么?

如果这是直接在打开的命令中 window 而不是批处理,
您可以使用前导 @ 符号来抑制当前命令的输出。

@for %i in (*) do @if /i not "%i"=="UPDATE.BAT" @del "%i" >nul 2>&1

在带有 @Echo off 的命令的批量切换输出中,将 for 变量的 % 符号加倍。

@Echo off
for %%i in (*) do if /i not "%%i"=="%~nx0" del "%%i" >nul 2>&1