无忧启动论坛

标题: 关于>nul 2> nul是什么意思 [打印本页]

作者: myashima    时间: 2006-7-27 06:52
标题: 关于>nul 2> nul是什么意思
请教:>nul 是什么意思?   那 2> nul又是什么意思?它们合在一起>nul 2>nul是什么意思
作者: namejm    时间: 2006-7-27 19:24
  >nul 是屏蔽标准输出在屏幕上的显示,2>nul 是屏蔽出错显示,>nul 2>nul 是无论对错,都屏蔽屏幕显示。
作者: myashima    时间: 2006-7-27 20:39
原帖由 myashima 于 2006-7-27 06:52 AM 发表
请教:>nul 是什么意思?   那 2> nul又是什么意思?它们合在一起>nul 2>nul是什么意思


哦,明白了 。谢谢
作者: gmy    时间: 2006-7-31 08:05
标题: 这种方式是否能用于纯DOS?
这种方式是否能用于纯DOS?
作者: namejm    时间: 2006-7-31 13:16
  在纯DOS下似乎是可以的,以下是DOS联盟中willsort以前所发的一段分析,因为一时想不起帖子的题目,暂时不能给出链接,只能把内容给贴出来,相信gmy版主对这篇分析不会感到陌生:

    “重定向”是自MSDOS起就被支持的命令行特性,负责将指定命令或语句所产生的输入输出请求由缺省的“控制台”转交给其它的“设备”来完成,它的启动标志是“重定向符号”(包括“>,>>,<”三个,其各自意义见[1])出现在句中。

    一般的命令行程序输入输出请求都通过内部定义三个“端口”(在NT下称为“句柄”,在DOS下未定义)来完成,分别为标准输入stdin、标准输出stdout、标准错误stderr。它们通常指向的设备为控制台(console,代码为CON),其中stdin指向控制台的键盘,stdout/stderr指向控制台的监视器。因此,控制台通常即指键盘与监视器的联合体,这是在早期大型机的终端机上所体现出来的概念。其中的stdin可被<重定向,stdout可被>、>>重定向,而stderr在DOS下不可直接重定向,只有通过ctty或其它命令将系统控制权转交给其它设备的方式,来间接完成。

    “设备”是指可控制PC硬件或端口的设备驱动程序或端口代码,它通常由系统底层或硬件驱动程序实现和支持。比如IO.SYS实现的控制台CON、系统时钟CLOCK$、未知设备CONFIG$、第一串口AUX、第一并口PRN、所有串口COM1~COM4、所有并口LPT1~LPT3、可用盘符A:-X:以及上文提到的空设备NUL。还有许多其它设备,比如HIMEM.SYS实现的XMSXXXX0,EMM386.EXE实现的EMMXXXX0,IFSHLP.SYS实现的IFS$HLP$等。
   
    在这些设备中,可以处理输入输出信息的很少,只有CON、NUL以及连接有输入输出硬件(打印机、MODEM等)的串口或并口设备。它们被称为“字符设备”,而磁盘文件也作为一种特殊的字符设备列选其中,这就大大扩充了重定向的自由度与实用性,以致很多人也将重定向称为“文件重定向”。
   
    空设备NUL是一个特殊的设备,因为它没有可控制的PC硬件或端口,而只是一个虚构的的设备或端口,它仅存在于软件层面。正因为如此,它可以接受所有重定向的输入输出请求而不给出任何回应,在NT下不会给出任何输入信息而结束输入请求,在DOS下则反复填充127个二进制字节1(显示为^A)后终止响应,这种特性使它很像天文学上的能吞噬一切物质和信息的“黑洞”,也很类似哲学上能颠转阴阳无中生有的“玄玄之道”。它之所以存在,是因为我们需要一个可以默默无闻地无条件吸纳各种冗余输出信息或输入请求的“回收站”,正如“黑洞”就像一个巨大的“宇宙垃圾场”一样。
   
    命令行对重定向符号出现的位置不做过多限定,只要重定向符号后紧随“字符设备”即可,故以下语句等效:

    echo Hello World> hello.txt
    echo Hello> Hello.txt World
    echo> Hello.txt Hello World
    > hello.txt echo Hello World

    在NT系列命令行中,重定向的作用范围由整个命令行转变为单个命令语句,受到了命令分隔符&,&&,||和语句块的制约限制。

    echo Message1> msg1.txt & echo Message2> msg2.txt
    if "%target%"=="" (echo message to screen ) else (echo message to file> %target%)
   
    综上所述,>nul 意为将此句命令所产生的标准输出请求重新定向到空设备中,而因为此设备的缄默特性,即相当于将此语句的输出信息屏蔽(并非隐藏);而 2>nul 则是将程序执行错误时的标准错误信息输出请求重定向后屏蔽。它们联合使用,即为将此语句所可能产生的所有输出信息屏蔽。

[1] 重定向命令在安全方面的攻防应用
http://www.cn-dos.net/forum/viewthread.php?tid=17578
作者: 135956    时间: 2006-8-3 14:42
去这里看看吧:
http://www.microsoft.com/technet ... 9cb35.mspx?mfr=true
作者: singel    时间: 2006-8-5 20:18
也学习一下,呵呵
作者: tmt2008    时间: 2006-9-8 15:40
为什么有时写一语句最后加>NUL,运行时显示 1>NUL。凭空多了1?
作者: namejm    时间: 2006-9-8 20:25
  如果你在CMD中跟踪语句的执行过程的话(echo on状态),会发现加了>nul的语句执行成功之后都会显示 1 >nul,这个是正常的,因为1表示成功执行后返回的句柄值,但是用在批处理中,echo off之后,这个1是不会显示在屏幕上的。
作者: tmt2008    时间: 2006-9-12 19:06
原帖由 namejm 于 2006-9-8 08:25 PM 发表
  如果你在CMD中跟踪语句的执行过程的话(echo on状态),会发现加了>nul的语句执行成功之后都会显示 1 >nul,这个是正常的,因为1表示成功执行后返回的句柄值,但是用在批处理中,echo off之后,这个1是不 ...

谢了




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3