关于Windows命令提示符中的 xxx > nul 2 > nul

  • Post author:
  • Post category:其他


写博客就像写作文,是要素材哒~


大家在运行程序的时候,有时候需要让他输出到文件(控制台输出),又不能改程序(别人给你的编译好的程序),就可以利用重定向

>

符号:


rem aaa.exe是要运行的程序的名称,op.lsktxt是要输出到的文件(本行开头的rem是DOS下的注释):



aaa.exe


>


op.lsktxt

如果要输出到设备,也可以这样哦!把要输出到的文件名改成设备名就好啦!

那如果不要输出呢?


rem nul是空设备,输出到空设备就相当于没有输出:



aaa.exe


>


nul

但是如果运行出错(不是崩溃,是用cerr输出),就还是会在控制台上输出:

代码:

#include <iostream>

using namespace std;

int main()
{
    printf("printf message");
    cerr << "error message" << endl;
    return 0;
}
//编译成err_msg_out.exe

控制台代码:


err_msg_out.exe


>


nul

输出:

error message

如果我们要屏蔽错误消息(和普通输出),有很多人都是这样做的:


xxx.exe


>


nul


2


>


nul

却没有说为什么,我也是看了C++ Primer Plus第17章才知道(粗略地提到了):

如果重定向没有起作用,则选定的消息都将被现实在屏幕上。然而,如果程序输出被重定向到一个文件,则第一条消息(如果被选定)将被发送到文件中,而第二条消息(如果被选定)将被发送到屏幕。顺便说一句,有些操作系统也允许对标准错误进行重定向。例如,在UNIX和Linux中,运算符2>重定向标准错误。

书中说的代码是:

if(success)
    std::cout << "Here come the goodies!\n";
else
{
    std::cerr << "Something horrible has happened.\n";
    exit(1);
}

书中说了有UNIX和Linux,其实Windows也可以,并且重定向可以连续使用,这就是为什么

xxx.exe


>


nul


2


>


nul

会起作用了。

还有,用没有的命令或没有的程序输出的也是错误消息,如:


dir


>


nul

就没有输出,而


diir


>


nul

就输出“’diir’ 不是内部或外部命令,也不是可运行的程序

或批处理文件。”,但


diir


>


nul


2


>


nul

就没有输出了。



注意!!2> nul中’>’和’nul’之间的空格不必要,但是’2’和’>’之间不能有空格!



版权声明:本文为m0_66248056原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。