![]() |
|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
![]() |
#2 (permalink) |
管理員
![]() ![]() |
![]() 這樣是不行的 因為沒有充分利用變量 ... 也就是變數
有些變數也可能有設定錯誤或是 IF 或 FOR 的使用錯誤? 視情況相同條件的 IF 一個就夠了,如 語法:
IF %%V LSS 10 ( mkdir %name%000%%V\開發\CAD mkdir %name%000%%V\開發\PPAP mkdir %name%000%%V\開發\成本 mkdir %name%000%%V\開發\成績表 mkdir %name%000%%V\開發\異常 mkdir %name%000%%V\品管\客訴 mkdir %name%000%%V\品管\不良品統計 mkdir %name%000%%V\品管\品質異常處理 mkdir %name%000%%V\品管\圖片及CP mkdir %name%000%%V\品管\進料 mkdir %name%000%%V\品管\出貨 mkdir %name%000%%V\品管\量測資料 mkdir %name%000%%V\品管\特採申請 mkdir %name%000%%V\品管\產品定期稽核 mkdir %name%000%%V\品管\CPKPPK mkdir %name%000%%V\品管\配合廠商 mkdir %name%000%%V\車床\SOP mkdir %name%000%%V\車床\機台程式 mkdir %name%000%%V\銑床\SOP mkdir %name%000%%V\銑床\機台程式 mkdir %name%000%%V\後加工\SOP ) 如果說 很多條件的 IF 內可使用的命令內容是一樣的話或多行相同的部分,可以改成片段呼叫或批次檔呼叫的方式。 這樣就可以把很多重複的部份可簡化掉了,日後若要小改一些地方也不會說改到吐血 語法:
for /L %%V in (1,1,99) do ( IF %%V LSS 10 (call :Make_Dirs %name%000%%V) IF %%V GEQ 10 (call :Make_Dirs %name%00%%V) ) for /L %%V in (100,1,%num%) do ( IF %%V LSS 1000 (call :Make_Dirs %name%0%%V) IF %%V GEQ 1000 (call :Make_Dirs %name%%%V) ) goto :eof :Make_Dirs ::片段開頭的標籤 mkdir %1\開發\CAD mkdir %1\開發\PPAP mkdir %1V\開發\成本 mkdir %1\開發\成績表 mkdir %1\開發\異常 mkdir %1\品管\客訴 mkdir %1\品管\不良品統計 mkdir %1\品管\品質異常處理 mkdir %1\品管\圖片及CP mkdir %1\品管\進料 mkdir %1\品管\出貨 mkdir %1\品管\量測資料 mkdir %1\品管\特採申請 mkdir %1\品管\產品定期稽核 mkdir %1\品管\CPKPPK mkdir %1\品管\配合廠商 mkdir %1\車床\SOP mkdir %1\車床\機台程式 mkdir %1\銑床\SOP mkdir %1\銑床\機台程式 mkdir %1\後加工\SOP goto :eof ::片段結尾,到這裡會離開這個片段 :eof 正確意思是代表該批次檔的結尾,不管前面執行了幾行,後面還有多少行,只要看到 goto :eof 表示後面的其他行的命令敘述不用做了。 那這能幹麼?搭配 『 :標籤名稱 』的標籤的語法一起使用時,批次檔中使用了 Call 語法時,這的 『 :標籤名稱 ~ goto :eof 』這一段的命令 集合就相當於程式設計中的 [副程式] 了,為了必免一般執行時,會被錯誤執行,因此會在『 :標籤名稱 』前面放一個goto :eof ,也就是 『 goto :eof :標籤名稱 ~ goto :eof 』的樣式,來使其完全獨立,若是這個片段需要至少被執行一此的話,或是某種排列執行的需要時,:標籤名稱 的 goto :eof 就可以省略不用。上述的範例中 :Make_Dirs 為了把相同的 mkdir %1%2\後加工\SOP 給予重複利用。又希望平常時不要被錯誤執行 因此就會如上述這樣了 goto :eof :Make_Dirs ...... 多行的命令內容 ...... goto :eof 但是這個批次檔到目前為止,只是單純從 1 開始建立起,並無法以指定範圍說來建立資料夾了 ... 因此要改過 ... 要設定一個『值域』的範圍,再讓 FOR 去跑就好了。 1,1,99 表示 從 1 開始,每次進 1,到 99結束 如此 FOR 裡面的 1 跟 99 要改成指定變數,如 NumStart,1,NumEnd,最前面再去增加兩個 Set /P 去接收 NumStart、NumEnd 的資料就以做到 值範圍變動了。 如 name 後面的那些國字是固定的嗎? 可以利用 FOR 讀取存文字檔,一次一行讀入來處理 正確說來要先卻確定『資料夾名稱格式』才能把 程式寫好,批次檔也是一樣 ... 如『名稱+數字/單位名稱/ 表格名稱』... 名稱+數字 的部份是可以隨需要變動,單位名稱、表格名稱則不能變更 / 表示每個『子』資料夾的層級 ... 如此拆解的3~4個程式部份,老實說迪西很懶惰懶得打 ... 1.可變部份程式的資料夾命名程式碼。如 1400-200~1400-311 或者是 10-3001~10-4115 2.數值變動範圍的設定與規格化。AAAA-BBB~AAAA-DDD 或者是 AA-BBBB~AA-CCCC 3.固定部份的程式碼。 MD 品管\產品定期稽核,好幾行。或是一個自解檔打包好。 4.資料輸入的方式。最前面的 set /p 的部份 要幾組輸入,如何顯示。 第 3 個部份最簡單,如果說確定是如此固定了,可以先寫一個簡單的批次檔先固定好, 由供其他的批次檔呼叫使用就好了,這樣就可以少很多。或者是,先土法煉鋼,把這個 固定部份的資料夾建立好,再用 WinRAR 壓縮起來,製作成為一個『自我解壓縮檔』, 供其他的批次檔呼叫使用。 這樣如個『 車床\SOP 』的部份那一大堆就解決了。 其他等迪西想到在說 ... 其實寫到這裡就表示出了這個功能可以用 簡單 C/C++ 語言 (DEV-C) 去寫 也可以用 VBA 、VB Script 來實踐,因為批次檔本身會有一種處理的缺陷 問題 ... 批次檔的問題: 1.會挑剔 Windwos CMD 的版本,同樣的批次檔,在 XP 或 Win7 中執行的 結果會可能會不一樣,或是 XP 可以跑,到了 Win7 下就不能用了。 2.語法辨識的問題,照一般的程式邏輯時,程式碼極少或簡單的時候,通常是 對的,但是稍微使用些所謂的『巢狀』結構的時候。就會出現莫名其妙的錯誤。 因此有時候就要使用稍微不太正常(不符合常見的程式邏輯的方法)的方式來處 理。 --------------------------------------------------------------------- 如果不想寫這些東西,其實也有類似的程式可以用,如 Folder Frenzy、Text 2 Folders 這兩個程式的原理很簡單,先準備好一個純文字文件的,資料夾名稱的清單,再把清單餵給 Folder Frenzy、Text 2 Folders 去產生資料夾就好了。 如果說這樣就可以輕鬆的用,就可以不用那麼痛苦的寫批次檔了。 Folder Frenzy http://briian.com/?p=7095 http://123.briian.com/forum.php?mod=...OTJ8MHwxMDg%3D Text 2 Folders http://www.soft4fun.net/how-to/%E6%8...-2-folders.htm 此帖於 2013-10-31 05:57 AM 被 getter 編輯. |
__________________ 在「專業主討論區」中的問題解決後,要記得按一下 ![]() 這是一種禮貌動作。 ![]() 一樣是在「專業主討論區」中發問,不管問題解決與否,都要回應別人的回答文喔。 不然搞 [斷頭文],只看不回應,下次被別人列入黑名單就不要怪人喔。 天線寶寶說再見啦~ ... 天線寶寶說再見啦~ 迪西:「再見~ 再見~」 『 Otaku Culture Party 』 關心您 ... ![]() |
|
![]() |
送花文章: 37855,
![]() |