防止Batch中的命令输出

时间:2014-06-07 16:50:38

标签: batch-file output

如何阻止CMD窗口中的输出?我知道如何为这些

做到这一点

@echo off

超时/ t 3 / nobreak> nul

MKDIR文件2> nul

但是我想知道所有命令的一般方法是什么,或者如何找到每个命令,我不必一直询问。我试图让XCopy无声地复制,这样屏幕就不会被垃圾邮件发送,但我有一种感觉,我也需要它用于其他命令。

2 个答案:

答案 0 :(得分:2)

有2个输出流: stdout (标准输出控制台)和 stderr (标准错误控制台)。

如果>nul或更正确1>nul,则写入 stdout 的文本会重定向到空设备。

使用2>nul,写入 stderr 的文本会重定向到空设备。

>nul2>nul可以在任何命令上使用,也可以同时使用,并且应该始终在行的末尾。它们也可以在行的开头使用,这在某些特殊情况下是有意义的,但大多数情况下,重定向运算符都写在一行的末尾。

大多数控制台命令和应用程序在使用选项/?(Windows)或-?(从Unix移植时)运行时会打印帮助。打开命令提示符窗口并使用xcopy /?

进行尝试

某些命令(如 xcopy )具有禁止输出到标准输出的特殊选项。 xcopy 的选项为/Q,它是安静的缩写。使用此选项可以使xcopy更快一点,因为将输出打印到 stdout 需要一些时间,如果输出重定向到null设备,当然会浪费时间。

但是在将所有输出重定向到空设备时,请注意可能出现的错误停止。例如,在使用 xcopy 时,应另外使用选项/C/R以避免错误时复制过程停止或目标目录中的只读文件停止启动复制过程的用户的信息,因为使用/Q和其他>nul 2>nul批处理作业未完成的原因。

在批处理文件中,始终应使用>nul,而不是1>nul,尽管通常也是如此。命令行解释程序会在>nul(空格+  1>nul)自动替换批处理文件的每个1>nul。当回显某些东西进入文件时应该考虑到这一点,以避免重定向到文件中的每一行经常不需要的尾随空格。

有关更多信息,请参阅Microsoft文章Using command redirection operators

答案 1 :(得分:0)

"一般方式"正是您正在做的事情,即使用nul将标准输出重定向到>nul。它应该始终是每一行的最后一部分。

mkdir示例您使用重定向标准错误(2>nul而非标准输出;我不确定为什么会这样做,但大概你知道为什么这已经完成了。)

但这样做的问题在于,您无法获得有关哪些有效以及哪些失败的信息,这使得难以追踪问题。如果您不想在屏幕上显示信息但希望以后可以在需要时使用,请改为重定向到文件。

REM Redirect first command to log, truncating anything
REM that existed in the file before.
mkdir Files > temp.log

REM Copy some files into the folder just created, appending
REM the results to the same log file
xcopy *.txt Files\ >> temp.log