已经有这个问题问代变种,但尽管写了一些相当复杂的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)复制。” 只是烦人,“文件未找到”让用户觉得这事出了问题(这还没有 - 没有文件是罚款)。
为了抑制输出,使用重定向到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"
如果你想你的批处理脚本都正常输出是沉默的(就像在你的榜样),要做到这一点最简单的方法是运行一个重定向的批处理文件:
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
安东尼奥
只需添加>NUL
在制造消息的线的端部。
例如,
COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat >NUL
您可以重定向标准输出到nul
将其隐藏。
COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat >nul
只需添加>nul
到要隐藏的输出命令。
在这里你可以看到重定向STD流的不同方式。
复制一个名为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
/ S复制目录和除了空的子目录。
/ E复制目录和子目录,包括空的。 同/ S / E。 可用于修改/ T。
/ I如果目标不存在,复制一个以上的文件,则假定目标一定是一个目录。
- / Y禁止提示确认要覆盖现有目标文件。