有這麼一個需求,要求做一個批處理文件,能夠自動執行某個目錄中的幾個可執行文件,並且把它們的屏幕輸出存入一個Log文件中。這裏涉及到兩個問題:
- 如何將屏幕輸出轉向到文件
- 如何確定Log的文件名
SET LogFile=%DATE%%TIME%.log
app1.exe param1 param2 > %LogFile%
app2.exe param1 param2 >> %LogFile%
app3.exe param1 param2 >> %LogFile%
好了,那麼我來加上引號,這下應該無敵了吧。
SET LogFile="%DATE%%TIME%.log"
app1.exe param1 param2 > %LogFile%
app2.exe param1 param2 >> %LogFile%
app3.exe param1 param2 >> %LogFile%
但是,還是很可惜,Windows會報告“參數錯誤”。這又是怎麼了呢?嗯,原來,Windows不允許文件名或目錄名中含有“:”,而%TIME%的輸出結果中恰好有兩個“:”。這就無語了。
正在絕望之時,突然在命令行裏鬼使神差的敲了一個“help set”,一切問題都明白了!以前都沒有意識到啊,Windows批處理竟有如此強大的威力(當然,這還是沒法和*nix比,不過已經比原來認識到的強多了)。
現在知道了,這個腳本可以這樣寫:
SET LogFile=%DATE%%TIME%
REM 把 : 都替換成 -
SET LogFile=%LogFile::=-%
REM 把空格都替換成 -
SET LogFile=%LogFile =-%
REM 把 . 都替換成 -
SET LogFile=%LogFile.=-%
SET LogFile=%LogFile%.log
app1.exe param1 param2 > %LogFile%
app2.exe param1 param2 >> %LogFile%
app3.exe param1 param2 >> %LogFile%
此外,還有help if和help call也很值得看,這些東西組合起來就構成了Windows批處理的高級用法。
嗯,說完了(噢,好像什麼都沒說啊……)。