![]() |
|
|||||||
| 論壇說明 |
|
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
|
主題工具 | 顯示模式 |
|
|
#9 (permalink) |
|
管理員
![]() ![]() |
寫批次檔的方式,老實說也有點麻煩 ...
如果改天忘了為何會這樣寫 ... 也要花點時間還回憶 ... 挺累的 ... 因此迪西建議 ... 買一套比較省事、簡單 ... 如果說覺得不怕麻煩 ... 就可以看下去 ... 說不定還會看不懂 ... ----------------------------------------------------- 至於批次檔 ... 迪西有寫教學 ... 不過得要耐著性子看完 ... 批次檔編程概念 ... ... 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 編輯. |
|
|
送花文章: 37855,
|