輸出的重新導向

會有輸出重新導向的需求,可能是因為我們想把執行指令的結果存到檔案內。做法相當簡單,只要使用>符號:

command > file
如果要append在file後,就使用»:
command >> file

但輸出流分成標準輸出stdout與標準錯誤輸出stderr,預設情況下都是操作sdtout。如果要輸出的是標準錯誤輸出:
command 2> file
command 2>> file

如果stdout與stderr要一同輸出,可以這樣搞,代表要將sdterr導入stdout中:
command > file 2>&1

如果今天你要執行一堆command,而且希望都輸出到檔案內呢? 可以透過Block的方式:
> file 2>&1 (
command1
command2
command3
)
切記,如果有做變數修改的動作,要把它放到Block之前,否則設置是無用的。另外一個方法是透過Jump的方式:
call :redirect > file 2>&1
exit /b
 
:redirect
command1
command2
command3
exit /b
Jump的方式不會造成設置變數的問題,但必須小心流程的控制。像在call :redirect後,必須執行exit,也可以在這再call另外一個Jump到最後面的label,避免繼續往下重複執行。

友藏內心獨白: 要寫好看的Batch需要懂非常多東西啊!