寫批次檔的方式,老實說也有點麻煩 ...
如果改天忘了為何會這樣寫 ... 也要花點時間還回憶 ... 挺累的 ...
因此迪西建議 ... 買一套比較省事、簡單 ...
如果說覺得不怕麻煩 ... 就可以看下去 ...
說不定還會看不懂 ...
-----------------------------------------------------
至於批次檔 ... 迪西有寫教學 ...
不過得要耐著性子看完 ...
批次檔編程概念 ... ...
1.跟基本程式設計差不多,只是要弄懂批次檔專用指令用法而已。
2.需要做試跑,因為某些地方很怪異。
3.某些以正式的程式社概念的邏輯可行,批次檔則不行會變得很奇怪。
4.建議可以使用 Notepad++ 這套文字編輯器,有支援批次檔的高亮語法顯示。
編寫起來才不會看到脫窗。
以下是迪西對這次的主題:寫的簡易批次檔
-------------------------------------------------------------------------
for %%i in (*.dnw) do (echo "%%i")
與
for %%i in (*.dnw) do (start /wait "" "%%i")
指令解說:
%%i:for Loop 的傳遞變數。
in:%%i 的來源。是 in 後面的 () 裡指的東西。本次為 *.dnw。
相當於程式設計的 for (i=0; i=i+1; i<=10) 的部份。
do:%%i 傳送到給文字命令使用的變數字串。是 do 後面的 () 裡指的東西。
本次為 start /wait "" "%%i"。相當於程式設計的 for ( --- ) {}的部份最後面 {}
的命令執行部份。
以 for 來說 %i 與 %%i 兩者都是用來傳遞變處用途的。差異在於,當是在 CMD 中鍵
入命令語法時並執行時,只能用 %i 用 %%i 時會出錯。相對的 %%i 則是使用在
*.bat/*.cmd 的批次檔中的變數語法。也就是在 cmd 視窗下 for 要用 %i 才會正常。
但是在 *.bat/*.cmd 的批次檔中,for 要用 %%i 才會正常。為何? 迪西也不知道。
for %%i in (*.dnw) do (echo "%%i") 執行時的動作解說:
執行時 for Loop 會依據 (*.dnw) 的描述,去找尋與批次檔放在一起或是目前 CMD
工作視窗位置的 *.dnw 檔案。並把找到的檔案,連同存在位置+完整檔名傳送到後面
的 do () 裡面。直到找完所有的 *.dnw 檔案為止,並結束執行。
echo 這個指令是把 %%i 顯示出來,就會架設顯示如: "D:\xxx\123.dnw" 的訊息。
受限於 cmd 的特性,若不把 %%i 用 "" 框起來。當存在位置有空格時,如 D:\xx xx\123.dnw 時,
cmd 會解讀成兩個段落的命令參數來傳定,如 D:\xx 跟 xx\123.dnw,因此執行上就
容易出錯。雖然以 echo 只是顯示出來,是沒有感覺到不同。但是給其他的執行命令就
會有問題。會變成只看到 D:\xx 而看不到 xx\123.dnw 就找不到檔案。
因此接著解說 for %%i in (*.dnw) do (start /wait "" "%%i") 就很清楚了
start /wait "":
start 是告訴 cmd 命令執行器執行後面 "%%i" 中描述的檔案。
/wait 則表示等待目前的執行的檔案執行結束,離來 start 的動作。當沒有 /wait
時,就會一口氣把 "%%i" 的檔案全部開啟執行。這樣會有一個問題,當這些檔案有
依序執行的必要(是一個一接個,而不是全部幾乎同時開啟時),就會有大麻煩。如更
新檔就是這類的時後,/wait 就得要使用了。
"" 是顯示工作視窗的抬頭標題,一般若不打算顯示,建議就是 "" 就好了。因為省略
的話,有時後會讓 start 搞不清楚是要執行的檔案還是顯示工作視窗的抬頭標題。
執行上因此出錯。
以本樓主題來說,要一次匯入完所有的字典更新,理論上是
for %%i in (*.dnw) do (start /wait "" "%%i") 命令存用記事本檔成
如 updnw.bat 或是 updnw.cmd 皆可,但只能事 ansi 格式,不可以事
Unicode 格式。
跟 *.dnw 檔案放在一起。在執行就好了 updnw 批次檔就好 。
-----------------------------------------------------------------------------
感覺好像很複雜,有比較簡單的的方法建立批次檔嗎?
就是用 cmd,新進入到有 *.dnw 的資料夾下,鍵入 dir /b *.dnw > list.txt
產生一個檔案清單 ... 內如類似大約會如下:
2002q3.dnw
2002q4.dnw
... ...
... ...
2010q3.dnw
2010q4.dnw
卻認好後,把 list.txt 清單另存成 updnw.bat 或是 updnw.cmd
再去執行 updnw.bat 或是 updnw.cmd,也許會自動帶入,但是
也可能發生一次如上述一次開啟全部檔案的狀況,導致更新失敗。
就只好辛苦的在 如 2010q4.dnw 前面加入 start /wait "",
變成 start /wait "" 2010q4.dnw。 變成是每一行都要加,如下
start /wait "" 2002q3.dnw
start /wait "" 2002q4.dnw
start /wait "" ... ...
start /wait "" ... ...
start /wait "" 2010q3.dnw
start /wait "" 2010q4.dnw
用這種清單的方式,編寫上或許比較簡單,但是檔越多改起來就越累,
當檔案有增加或是減少時,就要重新製作一次更新用的清單批次檔。
用那個 for 的比較簡單,讓 for 自己去自動找尋檔案比較輕鬆。
-------------------------------------------------------------------------
不管哪一種方式寫批次檔執行檔案,比較麻煩事 *.dnw 的問題。當初使以
*.exe 或是 *.msi 這類的可執行檔案,為對象的。
當 Windows 檔案關聯可以透過點兩下自動執行,因此理論上可行,實務
上還是要測試過比較保險。可行的話,就是撿到了。
最簡單的測試方式,就是先用 cmd 視窗,在工作位置下 dir *.dnw 可以列出
的位置,直接鍵入某個 .dnw 按下 [Enter] 看看有沒有反應,有正常的更新動作
表示有相當成功的機會。接著在測試 start /wait "" 某一個.dnw 看看是否也是
一樣,可以就表示。那個批次檔語法有相當機會可以成立並使用。
此帖於 2014-08-12 04:00 PM 被 getter 編輯.
|