- 引言
- Part 1 – 開始
- Part 2 – 變量
- Part 3 – 返回值
- Part 4 – 標(biāo)準(zhǔn)輸入輸出
- Part 5 – If 語句
- Part 6 – 循環(huán)語句
- Part 7 – 函數(shù)
- Part 8 – 解析輸入
- Part 9 – 日志
- Part 10 – 高級(jí)技巧
與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
- 使用默認(rèn)輸出只祠,
test.cmd > log.txt
log.txt :
Hello
`log.txt` 只包含了正常的消息內(nèi)容兜蠕, 屏幕上輸出了錯(cuò)誤信息:
>'some.exe' 不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件抛寝。
- 使用
test.cmd 1> log.txt
輸出
log.txt :
Hello
同上熊杨,`log.txt` 同樣包含了正常的消息內(nèi)容,屏幕上輸出了錯(cuò)誤消息墩剖。 說明猴凹,默認(rèn)的`>` 與 `1>` 相同。
- 使用
test.cmd 2> log.txt
輸出
log.txt :
'some.exe' 不是內(nèi)部或外部命令岭皂,也不是可運(yùn)行的程序或批處理文件郊霎。
`log.txt` 只輸出了異常的消息內(nèi)容,屏幕輸出了正常的消息爷绘。
- 使用
test.cmd > log.txt 1>&2
輸出
log.txt :
`log.txt`的內(nèi)容為空白书劝,屏幕上輸出了正常與錯(cuò)誤的消息。 這行命令的作用是將`stdout`當(dāng)作`stderr`處理土至,并把`stdout`輸出到`log.txt`购对,所以`stdout`顯示在了屏幕上,`log.txt`為空白陶因。
- 使用
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)器)幅虑。