Windows批處理的高級用法

嗯,標題好像很大,貌似會圖文並茂的講解很多用法似的……嘿嘿,其實沒這麼複雜,只是從一個例子出發,拋磚引玉,引出Windows批處理中並不爲我們注意的高級用法。真的很有用哦!

有這麼一個需求,要求做一個批處理文件,能夠自動執行某個目錄中的幾個可執行文件,並且把它們的屏幕輸出存入一個Log文件中。這裏涉及到兩個問題:
  1. 如何將屏幕輸出轉向到文件
  2. 如何確定Log的文件名
這兩個問題都比較簡單。第一個問題,通過“>”和“>>”可以輕鬆搞定,第二個問題似乎也不難,因爲Windows支持環境變量,其中有一個“%DATE%”代表當前的日期,還有個“%TIME%”代表當時的時間,精確到百分之一秒。似乎這已經足夠了吧,於是寫出下面的腳本:
@echo off
SET LogFile=%DATE%%TIME%.log

app1.exe param1 param2  > %LogFile%
app2.exe param1 param2 >> %LogFile%
app3.exe param1 param2 >> %LogFile%
但是,很可惜,它無法按預期結果運行,它只會生成一個沒有擴展名的文件,形如“2006-05-25”。想了想,哦,明白了,因爲%DATE%打出來的東西是“2006-05-25 星期四”,遇到空格之後重定向的機制就開始起作用了,它以爲這就是文件名全稱了。
好了,那麼我來加上引號,這下應該無敵了吧。
@echo off
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比,不過已經比原來認識到的強多了)。
現在知道了,這個腳本可以這樣寫:
@echo off
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 set就可以清楚看到了,Windows的文檔做的就是好啊。
此外,還有help if和help call也很值得看,這些東西組合起來就構成了Windows批處理的高級用法。

嗯,說完了(噢,好像什麼都沒說啊……)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章