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

标签 windows batch-file cmd echo

这个问题已经问了几代人了,但尽管写了一些相当复杂的 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

控制台命令使用两种输出:

  • 标准输出,或stdout

  • 标准错误,或 stderr

在这两者中,stdout 更常被内部命令(如 copy)和控制台实用程序或外部 命令使用,如 find 和其他,以及第三方控制台程序。

>NUL 抑制标准输出并正常工作,例如用于抑制 1 file(s) copied. 命令的 copy 消息。另一种语法是 1>NUL。所以,

COPY <i>file1</i> <i>file2</i> <b>>NUL</b>

COPY <i>file1</i> <i>file2</i> <b>1>NUL</b>

<b>>NUL</b> COPY <i>file1</i> <i>file2</i>

<b>1>NUL</b> COPY <i>file1</i> <i>file2</i>

抑制所有COPY的标准输出。

要抑制通常打印到 stderr 的错误消息,请改用 2>NUL。因此,要抑制 DEL 在未找到指定文件时打印的 File Not Found 消息,只需添加 2>NUL在命令行的开头或结尾:

DEL <i>file</i> <b>2>NUL</b>

<b>2>NUL</b> DEL <i>file</i>

虽然有时在尝试删除文件之前实际验证文件是否存在可能是更好的主意,就像您在自己的解决方案中所做的那样。但是请注意,您不需要使用循环一个一个地删除文件。您可以使用单个命令删除批处理:

IF EXIST "%scriptDirectory%*.noext" DEL "%scriptDirectory%*.noext"

关于windows - 如何使 Windows 批处理脚本完全无声?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14686330/

相关文章:

C编译错误(没有那个文件或目录,编译终止)

c++ - 终止子进程时终止所有(孙)子进程

windows - Git pull 无法更新本地引用

c++ - 如何确定计算机上安装的物理 RAM? ( Windows )

windows - 批处理变量集,但之后立即变为空白

windows - 差异 REG QUERY 本地与远程计算机批处理脚本

python - 根据文档文本字符串重命名多个文件

c++ - CMD 异常处理 C/C++

python - 在 Windows 10 Pycharm 社区中运行 Flask 应用

windows - TortoiseGit 错误 : "Remote name must not be empty"