gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:00:19 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com