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

文章介绍了如何利用重定向符号在运行程序时改变输出目的地,如将输出重定向到文件或设备。通过示例展示了如何使用>>和2>来控制标准输出和标准错误的重定向,以及如何屏蔽错误消息。同时,提到了不同操作系统如DOS、UNIX和Linux对此的支持情况。
摘要由CSDN通过智能技术生成

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


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

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'和'>'之间不能有空格!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值