查看單個文章
舊 2013-10-30, 11:21 PM   #2 (permalink)
getter
管理員
 
getter 的頭像
榮譽勳章
UID - 6433
在線等級: 級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時
註冊日期: 2002-12-08
住址: 天線星球
文章: 8157
精華: 0
現金: 19955 金幣
資產: 765391 金幣
預設

這樣是不行的 因為沒有充分利用變量 ... 也就是變數
有些變數也可能有設定錯誤或是 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 編輯.
__________________
在「專業主討論區」中的問題解決後,要記得按一下 http://forum.slime.com.tw/images/stamps/is_solved.gif 按鈕喔,
這是一種禮貌動作。

一樣是在「專業主討論區」中發問,不管問題解決與否,都要回應別人的回答文喔。
不然搞 [斷頭文],只看不回應,下次被別人列入黑名單就不要怪人喔。

天線寶寶說再見啦~ ... 天線寶寶說再見啦~

迪西:「再見~ 再見~」

Otaku Culture Party 關心您 ...
getter 目前離線  
送花文章: 37855, 收花文章: 6441 篇, 收花: 26052 次
回覆時引用此帖
有 2 位會員向 getter 送花:
grc45 (2013-11-01),丹楓 (2013-10-31)
感謝您發表一篇好文章