Windows 批處理腳本指南: 標(biāo)準(zhǔn)輸入輸出

與Unix/Linux 一樣碗暗,DOS使用三個(gè)通用的“文件流”來進(jìn)行輸入扭弧,輸出文本信息或者錯(cuò)誤信息邦邦。程序或者腳本使用標(biāo)準(zhǔn)輸入文件(stdin)讀取內(nèi)容前塔,標(biāo)準(zhǔn)輸出(stdout)輸出文件或者打印文本到屏幕上决瞳,標(biāo)準(zhǔn)錯(cuò)誤(stderr)輸出錯(cuò)誤信息到屏幕上转晰。

File Numbers


這三個(gè)標(biāo)準(zhǔn)文件(也稱為標(biāo)準(zhǔn)流)使用數(shù)字 0,1渐苏,2 進(jìn)行標(biāo)記收叶。標(biāo)準(zhǔn)輸入是文件0骄呼,標(biāo)準(zhǔn)輸出是文件1共苛,標(biāo)準(zhǔn)錯(cuò)誤是文件2判没。下文中的文件流重定向會(huì)用到這三個(gè)數(shù)字蜓萄。

Redirection[1]


批處理腳本經(jīng)常需要把一些程序的日志輸出的一個(gè)文本文件。 > 操作符可以將標(biāo)準(zhǔn)輸出或者錯(cuò)誤重定向到一個(gè)文件澄峰。比如嫉沽,列出當(dāng)前目錄下的文件信息,并存儲(chǔ)到一個(gè)文本文件俏竞,可以這么操作:

DIR > temp.txt

> 操作符會(huì)覆蓋目標(biāo)文件的內(nèi)容绸硕, >> 操作符則是將內(nèi)容追加至文件末。

DIR > temp.txt
DIR >> temp.txt

默認(rèn)情況下魂毁,>玻佩、>> 是將標(biāo)準(zhǔn)輸出重定向。 也可以在操作符前加上 2 (注意沒有空格) 來重定向標(biāo)準(zhǔn)錯(cuò)誤席楚。

DIR SomeFile.txt  2>> error.txt

也可以通過>&運(yùn)算符咬崔,將標(biāo)準(zhǔn)輸出、錯(cuò)誤相互轉(zhuǎn)換烦秩。 例如垮斯,將標(biāo)準(zhǔn)輸出轉(zhuǎn)為異常來輸出到error.txt

Some.exe 2> error.txt 1>&2

通過幾個(gè)例子看下, 將下邊的內(nèi)容保存為 test.cmd

@ECHO OFF
ECHO Hello
some.exe
  1. 使用默認(rèn)輸出只祠,test.cmd > log.txt

log.txt :
Hello

`log.txt` 只包含了正常的消息內(nèi)容兜蠕, 屏幕上輸出了錯(cuò)誤信息:
>'some.exe' 不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件抛寝。
  1. 使用 test.cmd 1> log.txt 輸出

log.txt :
Hello

同上熊杨,`log.txt` 同樣包含了正常的消息內(nèi)容,屏幕上輸出了錯(cuò)誤消息墩剖。 說明猴凹,默認(rèn)的`>` 與 `1>` 相同。
  1. 使用 test.cmd 2> log.txt 輸出

log.txt :
'some.exe' 不是內(nèi)部或外部命令岭皂,也不是可運(yùn)行的程序或批處理文件郊霎。

`log.txt` 只輸出了異常的消息內(nèi)容,屏幕輸出了正常的消息爷绘。
  1. 使用 test.cmd > log.txt 1>&2 輸出

log.txt :

`log.txt`的內(nèi)容為空白书劝,屏幕上輸出了正常與錯(cuò)誤的消息。  這行命令的作用是將`stdout`當(dāng)作`stderr`處理土至,并把`stdout`輸出到`log.txt`购对,所以`stdout`顯示在了屏幕上,`log.txt`為空白陶因。
  1. 使用 test.cmd 2> log.txt 1>&2 輸出

log.txt :
Hello
'some.exe' 不是內(nèi)部或外部命令骡苞,也不是可運(yùn)行的程序或批處理文件。

`log.txt`包含了正常與錯(cuò)誤的消息。 這行命令的作用是將`stdout`當(dāng)作`stderr`處理解幽,并將`stderr`輸出到`log.txt`  

使用 < 運(yùn)算符可以將文件內(nèi)容讀入程序或者腳本贴见。例如:

SORT < SomeFile.txt

SomeFile.txt的內(nèi)容為:

2
4
1
3

SORT < SomeFile.txt > result.txt

result.txt的內(nèi)容為:

1
2
3
4

Suppressing Program Output


NUL是一個(gè)虛擬的設(shè)備(文件),將stdout重定向到NUL躲株,則會(huì)丟棄標(biāo)準(zhǔn)輸出片部。例如:

ping 127.0.0.1 > NUL

屏幕上不會(huì)輸出任何內(nèi)容。在比如屏蔽掉錯(cuò)誤輸出霜定,以上文中的test.cmd腳本為例档悠,

test.cmd 2> NUL

Hello

只輸出了 Hello, 錯(cuò)誤的內(nèi)容并沒有輸出望浩。

Redirecting Program Output As Input to Another Program


如果要把一條命令的輸出作為另外一條命令的輸入辖所,可以借助|操作符來完成。例如將當(dāng)前目錄下的文件排序:

DIR /B | SORT

倒序:

DIR /B | SORT /R

A Cool Party Trick


有個(gè)技巧可以在命令提示符窗口中創(chuàng)建文本文件或者腳本磨德,通過CON將命令提示符自己的輸入重定向到一個(gè)文件奴烙。輸入完成后需要按下Ctrl + C, 發(fā)送一個(gè)結(jié)束符(EOF)剖张。

TYPE CON > output.txt

類似的技巧還有許多切诀,比如新建一個(gè)空文本:

TYPE NUL > w.txt

在DOS上還有一些其他的特殊設(shè)備可以重定向,但是大多數(shù)有點(diǎn)類似于LPT1(用于并行端口打印機(jī))和COM1(用于串口設(shè)備搔弄,如調(diào)制解調(diào)器)幅虑。

參考資料


  1. redirection operators ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市顾犹,隨后出現(xiàn)的幾起案子倒庵,更是在濱河造成了極大的恐慌,老刑警劉巖炫刷,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件擎宝,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡浑玛,警方通過查閱死者的電腦和手機(jī)绍申,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來顾彰,“玉大人极阅,你說我怎么就攤上這事≌窍恚” “怎么了筋搏?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)厕隧。 經(jīng)常有香客問我奔脐,道長(zhǎng)俄周,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任髓迎,我火速辦了婚禮栈源,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘竖般。我一直安慰自己,他們只是感情好茶鹃,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布涣雕。 她就那樣靜靜地躺著,像睡著了一般闭翩。 火紅的嫁衣襯著肌膚如雪挣郭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天疗韵,我揣著相機(jī)與錄音兑障,去河邊找鬼。 笑死蕉汪,一個(gè)胖子當(dāng)著我的面吹牛流译,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播者疤,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼福澡,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了驹马?” 一聲冷哼從身側(cè)響起革砸,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎糯累,沒想到半個(gè)月后算利,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泳姐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年效拭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胖秒。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡允耿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扒怖,到底是詐尸還是另有隱情较锡,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布盗痒,位于F島的核電站蚂蕴,受9級(jí)特大地震影響低散,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜骡楼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一熔号、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸟整,春花似錦引镊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涉茧,卻和暖如春赴恨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伴栓。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工伦连, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钳垮。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓惑淳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親饺窿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子汛聚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350