如何使Windows批处理脚本完全无声?

前端之家收集整理的这篇文章主要介绍了如何使Windows批处理脚本完全无声?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
几代人一直在问这个问题的变种,但是尽管写了一些非常复杂的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>

而“1个文件被复制”.只是很烦人,“找不到文件”让用户认为出了问题(它没有 – 没有文件没问题).

要抑制输出,请使用重定向到NUL.

控制台命令使用两种输出

>标准输出或标准输出,
>标准错误,或stderr.

在这两者中,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"

猜你在找的Windows相关文章