几代人一直在问这个问题的变种,但是尽管写了一些非常复杂的Windows脚本,我似乎无法找到如何让它们真正沉默.
以下是我目前的一个脚本的摘录:
@ECHO OFF SET scriptDirectory=%~dp0 COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat FOR /F %%f IN ('dir /B "%scriptDirectory%*.noext"') DO ( del "%scriptDirectory%%%f" ) ECHO
结果是:
C:\Temp> test.bat 1 file(s) copied. File Not Found Echo is off. C:\Temp>
要抑制输出,请使用重定向到NUL.
控制台命令使用两种输出:
在这两者中,stdout更常用于内部命令,如复制,控制台实用程序或外部命令,如find和其他命令,以及第三方控制台程序.
> NUL抑制标准输出并且工作正常,例如用于抑制复制的1个文件.复制命令的消息.替代语法是1> NUL.所以,
COPY file1 file2 >NUL
要么
COPY file1 file2 1>NUL
要么
>NUL COPY file1 file2
要么
1>NUL COPY file1 file2
抑制COPY的所有标准输出.
要禁止通常打印到stderr的错误消息,请改用2> NUL.因此,为了抑制DEL打印的文件未找到消息,当找不到指定的文件时,只需在命令行的开头或结尾添加2> NUL:
DEL file 2>NUL
要么
2>NUL DEL file
虽然有时在尝试删除文件之前实际验证文件是否存在可能是更好的主意,就像您在自己的解决方案中所做的那样.但请注意,您不需要使用循环逐个删除文件.您可以使用单个命令删除批次:
IF EXIST "%scriptDirectory%*.noext" DEL "%scriptDirectory%*.noext"