加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-13 20:36:46 所属栏目:Windows 来源:网络整理
导读:几代人一直在问这个问题的变种,但是尽管写了一些非常复杂的Windows脚本,我似乎无法找到如何让它们真正沉默. 以下是我目前的一个脚本的摘录: @ECHO OFFSET scriptDirectory=%~dp0COPY %scriptDirectory%test.bat %scriptDirectory%test2.batFOR /F %%f IN ('
几代人一直在问这个问题的变种,但是尽管写了一些非常复杂的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"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读