如何使Windows批处理脚本完全沉默?(How do I make a Windows batch

2019-07-19 05:43发布

已经有这个问题问代变种,但尽管写了一些相当复杂的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档(S)复制。” 只是烦人,“文件未找到”让用户觉得这事出了问题(这还没有 - 没有文件是罚款)。

Answer 1:

为了抑制输出,使用重定向到NUL

有两种输出的是控制台命令使用方法:

  • 标准输出,或stdout

  • 标准错误,或stderr

在这两者中, stdout是通过内部命令更多的时候,都用一样copy ,并通过控制台实用程序或外部命令,如find和其他人,以及由第三方控制台程序。

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

COPY file1 file2 >NUL

要么

COPY file1 file2 1>NUL

要么

>NUL COPY file1 file2

要么

1>NUL COPY file1 file2

抑制所有的COPY的标准输出。

为了抑制错误消息,其通常打印到stderr ,使用2>NUL代替。 因此,为了抑制File Not Found该邮件DEL打印时,那么,指定的文件没有找到,只需加2>NUL无论是在开始或在命令行的末尾:

DEL file 2>NUL

要么

2>NUL DEL file

虽然有时它可能是一个更好的主意,实际上验证是否试图删除它,就像你在你自己的解决方案做之前该文件存在。 但是请注意,你不需要一个一个地删除文件,使用循环。 您可以使用一个命令来删除很多:

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


Answer 2:

如果你想你的批处理脚本都正常输出是沉默的(就像在你的榜样),要做到这一点最简单的方法是运行一个重定向的批处理文件:

C:\Temp> test.bat >nul

这种方法不需要修改一行的脚本,它仍然显示在屏幕上的错误消息。 要剿所有输出,包括错误信息:

C:\Temp> test.bat >nul 2>&1

如果你的脚本有产生输出线要出现在屏幕上,或许会更简单,以添加重定向到那些 lineas而不是所有你想要保持沉默的台词:

@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
REM Next line DO appear in the screen
ECHO Script completed >con

安东尼奥



Answer 3:

只需添加>NUL在制造消息的线的端部。

例如,

COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat >NUL



Answer 4:

您可以重定向标准输出到nul将其隐藏。

COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat >nul

只需添加>nul到要隐藏的输出命令。

在这里你可以看到重定向STD流的不同方式。



Answer 5:

复制一个名为HTML和它的所有内容以静默方式目标目录。 如果目标目录不存在它仍然会创建它。

@echo off
TITLE Copy Folder with Contents

set SOURCE=C:\labs
set DESTINATION=C:\Users\MyUser\Desktop\html

xcopy %SOURCE%\html\* %DESTINATION%\* /s /e /i /Y >NUL

  1. / S复制目录和除了空的子目录。

  2. / E复制目录和子目录,包括空的。 同/ S / E。 可用于修改/ T。

  3. / I如果目标不存在,复制一个以上的文件,则假定目标一定是一个目录。

  4. / Y禁止提示确认要覆盖现有目标文件。


文章来源: How do I make a Windows batch script completely silent?