最近学校的网比较搓,DNS天天挂,出口带宽天天堵,NAT后的总出口带宽也才4MB/s(来源:360测速),唉,不亲身体会鬼才知道一堆人共享这个带宽是什么感觉。
废话不多说了,在Unix下重定向用着感觉很high,现在想把win下的nslookup的错误提示“*** Can't find server name for address 10.3.9.5: Non-existent domain”一同导出到txt文件,搜了下,嗯,遂有此文。
再说句废话,windows这是赤裸裸的抄袭啊,stdio(0),stdout(1),stderr(2)都跟unix是一样的
重定向符号主要有:>,>>,<,>&,<&和|,以下只有前五个的介绍,最后一个是管道,与Unix亦完全一致。
第一节
首先从一个经典问题开始,“1>nul 2>nul”的意思是既屏蔽正常的输出又屏蔽错误的输出,那么我们马上就知道了这里的1表示正常输出(即所谓的“标准输出”--stdout),2表示错误输出(即所谓的“标准错误输出”--stderr)。
1和2其实是句柄stdout和stderr的数字代号,至于什么是句柄,我认为可以理解为某种事物的一种标识,或者说这个句柄指向某个事物。举个例子来说,“标准输出”以句柄stdout为标识,或者说句柄stdout指向“标准输出”。
还有一个句柄--stdin,它是所谓“标准输入”的标识,数字代号是0。除此之外还有3~9可用,只是它们没有定义。
“标准输出”和“标准错误输出”默认是要输出到控制台con(即cmd窗口)的,而“标准输入”默认是由控制台con(即键盘)输入的,因此重定向的目的就是将输入输出流从默认位置重定向到新的位置。符号“>”和“>>”的默认句柄代号是1,而“<”的默认句柄代号是0。
“echo hhhhhh”类似于这样的语句可以说是我们再熟悉不过的了,但这只是种默认的状态,其实里面还有一些内容。这一句完整的应该是这样的:“echo hhhhhh 1>con 2>con”,意思是将echo命令的结果中的标准输出和标准错误输出输出到控制台con中,只不过此时标准错误输出是空的。
再看一个例子,如果给dir一个错误的参数,例如“dir /mm”,那么写全了就是“dir /mm 1>con 2>con”,只不过此时的标准输出是空的。如果你这样写的话“dir /mm 1>hero.txt”,那么屏幕上会照常显示错误信息但hero.txt中不会有内容。
再来一个标准输入的例子,“set /p var= ”其实应该是这样的“set /p var= 0<con”,只是因为0<con是默认值可以省略。我们当然可以从文件中读取输入,如“set /p var= 0<file.txt”,0是默认值可以省略。
nul代表的是“空设备”,是一个不存在的设备,将输出流重定向到空设备就相当于屏蔽掉了一样。而如果从空设备中读取输入,自然是读不到东西的,但的确是输入了,这也就是“set /p var=<nul”中“<nul”相当于回车但不换行的原因。
新闻热点
疑难解答