史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 一般電腦疑難討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2013-10-30, 09:58 AM   #1
victor624
註冊會員
榮譽勳章

勳章總數
UID - 365055
在線等級: 級別:0 | 在線時長:3小時 | 升級還需:2小時
註冊日期: 2013-10-28
文章: 5
精華: 0
現金: 9 金幣
資產: 9 金幣
預設 求助 - 批次新增資料夾與子資料夾

請問各位先進,我最近在幫公司做資料管理
需要一次建立大量的資料夾,而我之前有在論壇搜尋到相關的討論內容
整理了一下 寫出以下批次檔

但是有個問題,就是資料夾我在新增的時候,可能只需要某段編號
例如資料夾開頭為10- 編號可能是 3001~4115(4碼) 10-3001~10-4115
或者 開頭是1400- 編號是 200~311(3碼) 1400-200~1400-311

這要如何修改? 請各位先進指導 謝謝!!

語法:
set num=
set name=
cls
echo.
echo 請輸入資料夾名稱:
set /p name=
echo.
echo.
echo 請輸入資料夾數量 100~9999 個:
set /p num=

for /L %%V in (1,1,99) do (
cls

IF %%V LSS 10 (mkdir %name%000%%V\開發\CAD)
IF %%V LSS 10 (mkdir %name%000%%V\開發\PPAP)
IF %%V LSS 10 (mkdir %name%000%%V\開發\成本)
IF %%V LSS 10 (mkdir %name%000%%V\開發\成績表)
IF %%V LSS 10 (mkdir %name%000%%V\開發\異常)
IF %%V LSS 10 (mkdir %name%000%%V\品管\客訴)
IF %%V LSS 10 (mkdir %name%000%%V\品管\不良品統計)
IF %%V LSS 10 (mkdir %name%000%%V\品管\品質異常處理)
IF %%V LSS 10 (mkdir %name%000%%V\品管\圖片及CP)
IF %%V LSS 10 (mkdir %name%000%%V\品管\進料)
IF %%V LSS 10 (mkdir %name%000%%V\品管\出貨)
IF %%V LSS 10 (mkdir %name%000%%V\品管\量測資料)
IF %%V LSS 10 (mkdir %name%000%%V\品管\特採申請)
IF %%V LSS 10 (mkdir %name%000%%V\品管\產品定期稽核)
IF %%V LSS 10 (mkdir %name%000%%V\品管\CPKPPK)
IF %%V LSS 10 (mkdir %name%000%%V\品管\配合廠商)
IF %%V LSS 10 (mkdir %name%000%%V\車床\SOP)
IF %%V LSS 10 (mkdir %name%000%%V\車床\機台程式)
IF %%V LSS 10 (mkdir %name%000%%V\銑床\SOP)
IF %%V LSS 10 (mkdir %name%000%%V\銑床\機台程式)
IF %%V LSS 10 (mkdir %name%000%%V\後加工\SOP)

IF %%V GEQ 10 (mkdir %name%00%%V\開發\CAD)
IF %%V GEQ 10 (mkdir %name%00%%V\開發\PPAP)
IF %%V GEQ 10 (mkdir %name%00%%V\開發\成本)
IF %%V GEQ 10 (mkdir %name%00%%V\開發\成績表)
IF %%V GEQ 10 (mkdir %name%00%%V\開發\異常)
IF %%V GEQ 10 (mkdir %name%00%%V\品管\客訴)
IF %%V GEQ 10 (mkdir %name%00%%V\品管\不良品統計)
IF %%V GEQ 10 (mkdir %name%00%%V\品管\品質異常處理)
IF %%V GEQ 10 (mkdir %name%00%%V\品管\圖片及CP)
IF %%V GEQ 10 (mkdir %name%00%%V\品管\進料)
IF %%V GEQ 10 (mkdir %name%00%%V\品管\出貨)
IF %%V GEQ 10 (mkdir %name%00%%V\品管\量測資料)
IF %%V GEQ 10 (mkdir %name%00%%V\品管\特採申請)
IF %%V GEQ 10 (mkdir %name%00%%V\品管\產品定期稽核)
IF %%V GEQ 10 (mkdir %name%00%%V\品管\CPKPPK)
IF %%V GEQ 10 (mkdir %name%00%%V\品管\配合廠商)
IF %%V GEQ 10 (mkdir %name%00%%V\車床\SOP)
IF %%V GEQ 10 (mkdir %name%00%%V\車床\機台程式)
IF %%V GEQ 10 (mkdir %name%00%%V\銑床\SOP)
IF %%V GEQ 10 (mkdir %name%00%%V\銑床\機台程式)
IF %%V GEQ 10 (mkdir %name%00%%V\後加工\SOP)
)


for /L %%V in (100,1,%num%) do (
cls

IF %%V LSS 1000 (mkdir %name%0%%V\開發\CAD)
IF %%V LSS 1000 (mkdir %name%0%%V\開發\PPAP)
IF %%V LSS 1000 (mkdir %name%0%%V\開發\成本)
IF %%V LSS 1000 (mkdir %name%0%%V\開發\成績表)
IF %%V LSS 1000 (mkdir %name%0%%V\開發\異常)
IF %%V LSS 1000 (mkdir %name%0%%V\品管\客訴)
IF %%V LSS 1000 (mkdir %name%0%%V\品管\不良品統計)
IF %%V LSS 1000 (mkdir %name%0%%V\品管\品質異常處理)
IF %%V LSS 1000 (mkdir %name%0%%V\品管\圖片及CP)
IF %%V LSS 1000 (mkdir %name%0%%V\品管\進料)
IF %%V LSS 1000 (mkdir %name%0%%V\品管\出貨)
IF %%V LSS 1000 (mkdir %name%0%%V\品管\量測資料)
IF %%V LSS 1000 (mkdir %name%0%%V\品管\特採申請)
IF %%V LSS 1000 (mkdir %name%0%%V\品管\產品定期稽核)
IF %%V LSS 1000 (mkdir %name%0%%V\品管\CPKPPK)
IF %%V LSS 1000 (mkdir %name%0%%V\品管\配合廠商)
IF %%V LSS 1000 (mkdir %name%0%%V\車床\SOP)
IF %%V LSS 1000 (mkdir %name%0%%V\車床\機台程式)
IF %%V LSS 1000 (mkdir %name%0%%V\銑床\SOP)
IF %%V LSS 1000 (mkdir %name%0%%V\銑床\機台程式)
IF %%V LSS 1000 (mkdir %name%0%%V\後加工\SOP)

IF %%V GEQ 1000 (mkdir %name%%%V\開發\CAD)
IF %%V GEQ 1000 (mkdir %name%%%V\開發\PPAP)
IF %%V GEQ 1000 (mkdir %name%%%V\開發\成本)
IF %%V GEQ 1000 (mkdir %name%%%V\開發\成績表)
IF %%V GEQ 1000 (mkdir %name%%%V\開發\異常)
IF %%V GEQ 1000 (mkdir %name%%%V\品管\客訴)
IF %%V GEQ 1000 (mkdir %name%%%V\品管\不良品統計)
IF %%V GEQ 1000 (mkdir %name%%%V\品管\品質異常處理)
IF %%V GEQ 1000 (mkdir %name%%%V\品管\圖片及CP)
IF %%V GEQ 1000 (mkdir %name%%%V\品管\進料)
IF %%V GEQ 1000 (mkdir %name%%%V\品管\出貨)
IF %%V GEQ 1000 (mkdir %name%%%V\品管\量測資料)
IF %%V GEQ 1000 (mkdir %name%%%V\品管\特採申請)
IF %%V GEQ 1000 (mkdir %name%%%V\品管\產品定期稽核)
IF %%V GEQ 1000 (mkdir %name%%%V\品管\CPKPPK)
IF %%V GEQ 1000 (mkdir %name%%%V\品管\配合廠商)
IF %%V GEQ 1000 (mkdir %name%%%V\車床\SOP)
IF %%V GEQ 1000 (mkdir %name%%%V\車床\機台程式)
IF %%V GEQ 1000 (mkdir %name%%%V\銑床\SOP)
IF %%V GEQ 1000 (mkdir %name%%%V\銑床\機台程式)
IF %%V GEQ 1000 (mkdir %name%%%V\後加工\SOP)
)
victor624 目前離線  
送花文章: 0, 收花文章: 2 篇, 收花: 3 次
回覆時引用此帖
舊 2013-10-30, 11:21 PM   #2 (permalink)
管理員
 
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)
感謝您發表一篇好文章
舊 2013-10-31, 05:35 AM   #3 (permalink)
管理員
 
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 金幣
預設

若是依照迪西想的那種資料夾結構 ... 批次檔不用寫的這麼囉說 說不定連 for 也用不到

1.先建立一個 AA-bbb~AA-ccc 的資料夾。
2.再 AA-bbb~AA-ccc 的資料夾裡面,再建立上述的一對子資料夾。

若是這樣的話 ...

解決的方案一:如同迪西之前說的 使用 WinRAR 解決
1.建立一個上述條兩個條件的範本空資料夾。
2.用 WinRAR 打包成一個資料夾。
3.用 WinRAR 再轉成一個自我解壓縮檔,有沒有設定成安靜模式解壓說縮都可以。

日後要用的話,就點擊這個自我解壓縮檔,自動解壓縮就完成的同時,這個一堆大量的資料夾也就
好了。這時只要再去改一下 AA-bbb~AA-ccc 資料夾的名稱就好了。

解決的方案二:使用 Folder Frenzy 或Text 2 Folders
1.平常先建立好字典檔。
2.再使用該程式產生。
3.有不對的地方再自行修改。

解決的方案三:寫個簡易批次檔、VB Script 來用
語法:
@Echo off
cls
md AA-bbbb~AA-cccc
cd AA-bbbb~AA-cccc
md  開發\CAD
md  開發\PPAP
md  開發\成本
md  開發\成績表
md  開發\異常
md  品管\客訴
md  品管\不良品統計
md  品管\品質異常處理
md  品管\圖片及CP
md  品管\進料
md  品管\出貨
md  品管\量測資料
md  品管\特採申請
md  品管\產品定期稽核
md  品管\CPKPPK
md  品管\配合廠商
md  車床\SOP
md  車床\機台程式
md  銑床\SOP
md  銑床\機台程式
md  後加工\SOP
cd..
1.使用上述的批次檔,產生範本資料夾。
2.手動把 AA-bbbb~AA-cccc 的資料夾名稱改成想要的就可以了。
getter 目前離線  
送花文章: 37855, 收花文章: 6441 篇, 收花: 26052 次
+20 金幣
回覆時引用此帖
有 2 位會員向 getter 送花:
a471 (2013-11-01),丹楓 (2013-10-31)
感謝您發表一篇好文章
舊 2013-10-31, 12:02 PM   #4 (permalink)
註冊會員
榮譽勳章

勳章總數
UID - 365055
在線等級: 級別:0 | 在線時長:3小時 | 升級還需:2小時
註冊日期: 2013-10-28
文章: 5
精華: 0
現金: 9 金幣
資產: 9 金幣
預設

謝謝 getter 指教!
我參考您跟朋友改的範例,再次改寫

語法:
set num1=
set num2=
set name=
cls
echo. %titles%
echo.
echo 請輸入資料夾名稱:
set /p name=
echo.
echo.
echo 請輸入開始編號(1~9999):
set /p num1=

echo 請輸入結束編號(1~9999):
set /p num2=


if %%V LSS 10    (goto run1) 
if %%V GEQ 10     LEQ 99    (goto run2) 
if %%V GEQ 100    LEQ 999   (goto run3)
if %%V GEQ 1000   LEQ 9999  (goto run4)
cls

:run1
for /L %%V in (%num1%,1,%num2%) do (
IF %%V LSS 10 (call:Make_Dirs %name%000%%V)
)
:run2
for /L %%V in (%num1%,1,%num2%) do (
IF %%V GEQ 10 IF %%V LEQ 99 (call:Make_Dirs %name%00%%V)
)
:run3
for /L %%V in (%num1%,1,%num2%) do (
IF %%V GEQ 100 IF %%V LEQ 999 (call:Make_Dirs %name%0%%V)
)
:run4
for /L %%V in (%num1%,1,%num2%) do (
IF %%V GEQ 1000 IF %%V LEQ 9999 (call:Make_Dirs %name%%%V)
)

goto :eof
:Make_Dirs
mkdir %1\開發\CAD
mkdir %1\開發\PPAP
mkdir %1\開發\成本
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
victor624 目前離線  
送花文章: 0, 收花文章: 2 篇, 收花: 3 次
回覆時引用此帖
舊 2013-10-31, 12:11 PM   #5 (permalink)
註冊會員
榮譽勳章

勳章總數
UID - 365055
在線等級: 級別:0 | 在線時長:3小時 | 升級還需:2小時
註冊日期: 2013-10-28
文章: 5
精華: 0
現金: 9 金幣
資產: 9 金幣
預設

引用:
作者: getter 查看文章
-

如果不想寫這些東西,其實也有類似的程式可以用,如 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
您說的這些軟體,也有試過!只是子資料夾不方便用txt帶入
txt必須把第一層資料夾也寫進去 我建立的資料夾一次幾乎都破千個
這樣就等於一次要寫好幾千筆資料了
victor624 目前離線  
送花文章: 0, 收花文章: 2 篇, 收花: 3 次
回覆時引用此帖
有 2 位會員向 victor624 送花:
a471 (2013-11-01),getter (2013-10-31)
感謝您發表一篇好文章
舊 2013-10-31, 04:35 PM   #6 (permalink)
管理員
 
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 金幣
預設

引用:
作者: victor624 查看文章
謝謝 getter 指教!
我參考您跟朋友改的範例,再次改寫

語法:
set num1=
set num2=
set name=
cls
echo. %titles%
echo.
echo 請輸入資料夾名稱:
set /p name=
echo.
echo.
echo 請輸入開始編號(1~9999):
set /p num1=

echo 請輸入結束編號(1~9999):
set /p num2=


if %%V LSS 10    (goto run1) 
if %%V GEQ 10     LEQ 99    (goto run2) 
if %%V GEQ 100    LEQ 999   (goto run3)
if %%V GEQ 1000   LEQ 9999  (goto run4)
cls

:run1
for /L %%V in (%num1%,1,%num2%) do (
IF %%V LSS 10 (call:Make_Dirs %name%000%%V)
)
:run2
for /L %%V in (%num1%,1,%num2%) do (
IF %%V GEQ 10 IF %%V LEQ 99 (call:Make_Dirs %name%00%%V)
)
:run3
for /L %%V in (%num1%,1,%num2%) do (
IF %%V GEQ 100 IF %%V LEQ 999 (call:Make_Dirs %name%0%%V)
)
:run4
for /L %%V in (%num1%,1,%num2%) do (
IF %%V GEQ 1000 IF %%V LEQ 9999 (call:Make_Dirs %name%%%V)
)

goto :eof
:Make_Dirs
mkdir %1\開發\CAD
mkdir %1\開發\PPAP
mkdir %1\開發\成本
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
那個標紅字的地方有錯誤,當有上下條件限制的時候,是兩個 IF 去作巢狀檢查

此外也可以利用 for /F 的強化指令去作字典檔的模式來作建立資料夾的控制 ...

基本上已經有一個地方有作 IF check 的話就不用去作第二次的 IF check



可以再幾個地方多些檢驗的機制
語法:
@echo off
:ReKeyIn
set num1=bbbb
set num2=cccc
set name=AA

call :Dirs
set /p "name=請輸入資料夾名稱: "

:ReNum1
set num1=bbbb
call :Dirs
set /p "num1=請輸入開始編號(1~9999): "
set /a num1=%num1%
if %num1% EQU bbbb (
   echo.& echo.開始編號輸入為 0 錯誤,請重新輸入。 
   echo.& Pause & goto :ReNum1 )
if %num1% LSS 1 (
   echo.& echo.開始編號輸入為 0 錯誤,請重新輸入。 
   echo.& Pause & goto :ReNum1 )

:ReNum2
set num2=cccc
call :Dirs
set /p "num2=請輸入結束編號(1~9999): "
set /a num2=%num2%
if %num2% EQU cccc (
   echo.& echo.結束編號輸入為 0 錯誤,請重新輸入。 
   echo.& Pause & goto :ReNum2 )
if %num2% LSS 1 (
   echo.& echo.結束編號輸入為 0 錯誤,請重新輸入。 
   echo.& Pause & goto :ReNum2 )
if %num1% GEQ %num2% ( 
   echo.& echo.結束編號>=開始編號的錯誤,請重新輸入。
   echo.& Pause & goto :ReNum2 )

call :Dirs
set /p "YesNo=請確認資料夾名稱(正確輸入 Y,錯誤要重新輸入者輸入 N): "
if /i %YesNo% == N (goto :ReKeyIn)

if %num2% LSS 10                       (goto run1) 
if %num2% GEQ 10   if %num2% LSS 100   (goto run2) 
if %num2% GEQ 100  if %num2% LSS 1000  (goto run3)
if %num2% GEQ 1000 if %num2% LSS 10000 (goto run4)


goto :eof
:run1
for /L %%V in (%num1%,1,%num2%) do ( 
    cls
	echo.建立資料夾: %name%-000%%V 
	call:Make_Dirs %name%-000%%V 
	)
goto :eof

:run2
for /L %%V in (%num1%,1,%num2%) do ( 
    cls
	echo.建立資料夾: %name%-00%%V 
	call:Make_Dirs %name%-00%%V 
	)
goto :eof

:run3
for /L %%V in (%num1%,1,%num2%) do ( 
    cls
	echo.建立資料夾: %name%-0%%V 
	call:Make_Dirs %name%-0%%V 
	)
goto :eof

:run4
for /L %%V in (%num1%,1,%num2%) do ( 
    cls
	echo.建立資料夾: %name%-%%V 
	call:Make_Dirs %name%-%%V 
	)
goto :eof

:Dirs
cls
echo.
if %num1% EQU bbbb if %num2% EQU cccc (echo.目標主資料名稱: "%name%-%num1%"~"%name%-%num2%")
if %num1% LSS 10   if %num2% EQU cccc (echo.目標主資料名稱: "%name%-000%num1%"~"%name%-%num2%") else (echo.目標主資料名稱: "%name%-000%num1%"~"%name%-000%num2%")
if %num1% GEQ 10   if %num1% LSS 100   if %num2% EQU cccc (echo.目標主資料名稱: "%name%-00%num1%"~"%name%-%num2%") else (echo.目標主資料名稱: "%name%-00%num1%"~"%name%-00%num2%")
if %num1% GEQ 100  if %num1% LSS 1000  if %num2% EQU cccc (echo.目標主資料名稱: "%name%-0%num1%"~"%name%-%num2%") else (echo.目標主資料名稱: "%name%-0%num1%"~"%name%-0%num2%")
if %num1% GEQ 1000 if %num1% LSS 10000 (echo.目標主資料名稱: "%name%-%num1%"~"%name%-%num2%")
echo.
goto :eof

:Make_Dirs
mkdir %1\開發\CAD
mkdir %1\開發\PPAP
mkdir %1\開發\成本
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

此帖於 2013-12-10 11:34 AM 被 getter 編輯.
getter 目前離線  
送花文章: 37855, 收花文章: 6441 篇, 收花: 26052 次
回覆時引用此帖
有 3 位會員向 getter 送花:
a471 (2013-11-01),grc45 (2013-11-01),丹楓 (2013-10-31)
感謝您發表一篇好文章
舊 2013-10-31, 04:59 PM   #7 (permalink)
管理員
 
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 金幣
預設 用 for /F 的字典檔方式

語法:
@echo off
:ReKeyIn
set num1=bbbb
set num2=cccc
set name=AA

call :Dirs
set /p "name=請輸入資料夾名稱: "

:ReNum1
set num1=bbbb
call :Dirs
set /p "num1=請輸入開始編號(1~9999): "
set /a num1=%num1%
if %num1% EQU bbbb (
   echo.& echo.開始編號輸入為 0 錯誤,請重新輸入。 
   echo.& Pause & goto :ReNum1 )
if %num1% LSS 1 (
   echo.& echo.開始編號輸入為 0 錯誤,請重新輸入。 
   echo.& Pause & goto :ReNum1 )

:ReNum2
set num2=cccc
call :Dirs
set /p "num2=請輸入結束編號(1~9999): "
set /a num2=%num2%
if %num2% EQU cccc (
   echo.& echo.結束編號輸入為 0 錯誤,請重新輸入。 
   echo.& Pause & goto :ReNum2 )
if %num2% LSS 1 (
   echo.& echo.結束編號輸入為 0 錯誤,請重新輸入。 
   echo.& Pause & goto :ReNum2 )
if %num1% GEQ %num2% ( 
   echo.& echo.結束編號>=開始編號的錯誤,請重新輸入。
   echo.& Pause & goto :ReNum2 )

call :Dirs
set /p "YesNo=請確認資料夾名稱(正確輸入 Y,錯誤要重新輸入者輸入 N): "
if /i %YesNo% == N (goto :ReKeyIn)

if %num2% LSS 10                       (goto run1) 
if %num2% GEQ 10   if %num2% LSS 100   (goto run2) 
if %num2% GEQ 100  if %num2% LSS 1000  (goto run3)
if %num2% GEQ 1000 if %num2% LSS 10000 (goto run4)


goto :eof
:run1
for /L %%V in (%num1%,1,%num2%) do ( 
    cls
	echo.建立資料夾: %name%-000%%V 
	call:Make_Dirs %name%-000%%V 
	)
goto :eof

:run2
for /L %%V in (%num1%,1,%num2%) do ( 
    cls
	echo.建立資料夾: %name%-00%%V 
	call:Make_Dirs %name%-00%%V 
	)
goto :eof

:run3
for /L %%V in (%num1%,1,%num2%) do ( 
    cls
	echo.建立資料夾: %name%-0%%V 
	call:Make_Dirs %name%-0%%V 
	)
goto :eof

:run4
for /L %%V in (%num1%,1,%num2%) do ( 
    cls
	echo.建立資料夾: %name%-%%V 
	call:Make_Dirs %name%-%%V 
	)
goto :eof

:Dirs
cls
echo.
if %num1% EQU bbbb if %num2% EQU cccc (echo.目標主資料名稱: "%name%-%num1%"~"%name%-%num2%")
if %num1% LSS 10   if %num2% EQU cccc (echo.目標主資料名稱: "%name%-000%num1%"~"%name%-%num2%") else (echo.目標主資料名稱: "%name%-000%num1%"~"%name%-000%num2%")
if %num1% GEQ 10   if %num1% LSS 100   if %num2% EQU cccc (echo.目標主資料名稱: "%name%-00%num1%"~"%name%-%num2%") else (echo.目標主資料名稱: "%name%-00%num1%"~"%name%-00%num2%")
if %num1% GEQ 100  if %num1% LSS 1000  if %num2% EQU cccc (echo.目標主資料名稱: "%name%-0%num1%"~"%name%-%num2%") else (echo.目標主資料名稱: "%name%-0%num1%"~"%name%-0%num2%")
if %num1% GEQ 1000 if %num1% LSS 10000 (echo.目標主資料名稱: "%name%-%num1%"~"%name%-%num2%")
echo.
goto :eof

:Make_Dirs
for /F "eol=; skip=1 tokens=1 delims=," %%A in ( MDs.txt ) do (
  echo.建立子資料:"%%A"
  md "%1\%%A"   
 )
goto :eof


字典檔需要與批次檔在一起,MDs.txt 字典檔 的內容
語法:
;MDs.txt 字典檔
開發\CAD
開發\PPAP
開發\成本
開發\成績表
開發\異常
品管\客訴
品管\不良品統計
品管\品質異常處理
品管\圖片及CP
品管\進料
品管\出貨
品管\量測資料
品管\特採申請
品管\產品定期稽核
品管\CPKPPK
品管\配合廠商
車床\SOP
車床\機台程式
銑床\SOP
銑床\機台程式

字典檔的方式主要是依照 FOR /F "eol=; skip=1 tokens=1 delims=," 的控制敘述

/F 表示開啟 FOR 的讀檔模式

" " 表示為 /F 的進階控制參數
eol=; 表示 ; 號之後的該行文字敘述為「註解」。
skip=3 表示一開始跳過的行數。
tokens=1 是對應的 FOR 的 %%V 參數的對應個數,詳細請參考 FOR /? 。
delims=, 表示 , 是用來決定單行資料區分,幾個區分斷的符號,當不輸入的話,以
預設值為空白、tab 符號為區隔。 詳細請參考 FOR /? 。

此帖於 2013-12-10 11:34 AM 被 getter 編輯.
getter 目前離線  
送花文章: 37855, 收花文章: 6441 篇, 收花: 26052 次
+20 金幣
回覆時引用此帖
有 3 位會員向 getter 送花:
a471 (2013-11-01),grc45 (2013-11-01),丹楓 (2013-10-31)
感謝您發表一篇好文章
舊 2013-12-09, 03:09 PM   #8 (permalink)
註冊會員
榮譽勳章

勳章總數
UID - 365055
在線等級: 級別:0 | 在線時長:3小時 | 升級還需:2小時
註冊日期: 2013-10-28
文章: 5
精華: 0
現金: 9 金幣
資產: 9 金幣
預設

感謝getter指導
小弟目前還有一個疑問
選項3的第一層資料夾要帶入TXT檔建立
TXT檔內容是不連續號碼 例如

3323-119
3603-226
3603-227
3603-308
3603-309
3604-641
3604-647
3703-010
3703-011
3703-232
3703-233
3703-238
3703-239

然後第二層之後的資料夾 帶入:Make_Dirs的資料夾名稱
該如何改寫呢?? 再請指教 謝謝


語法:
@Echo off
cd /d %~dp0 

@Echo off

TITLE=%titles%

Echo  ╔═════════════════╗
Echo  ║  編碼選擇:                      ║ 
Echo  ║ 1.後3碼 按1                      ║ 
Echo  ║ 2.後4碼 案2                      ║ 
Echo  ║ 3.載入TXT檔                      ║
Echo  ╙═════════════════╜
set /p x=請選擇→
if /I "%x%"=="1" goto :1
if /I "%x%"=="2" goto :2
if /I "%x%"=="3" goto :3
cd /d %~dp0 
echo 輸入錯誤
exit

:1
set num1=
set num2=
set name=
cls
echo. %titles%
echo.
echo 請輸入資料夾名稱:
set /p name=
echo.
echo.
echo 請輸入開始編號(1~999):
set /p num1=
echo 請輸入結束編號(1~999):
set /p num2=
if %%V LSS 10    (goto run5)

:run5
for /L %%V in (%num1%,1,%num2%) do (
IF %%V LSS 10 (call:Make_Dirs %name%-00%%V)
IF %%V GEQ 10 IF %%V LEQ 99 (call:Make_Dirs %name%-0%%V)
IF %%V GEQ 100 IF %%V LEQ 999 (call:Make_Dirs %name%-%%V)
)
cls
goto :eof

:2
set num1=
set num2=
set name=
cls
echo. %titles%
echo.
echo 請輸入資料夾名稱:
set /p name=
echo.
echo.
echo 請輸入開始編號(1~9999):
set /p num1=
echo 請輸入結束編號(1~9999):
set /p num2=
if %%V LSS 10    (goto run1) 
if %%V GEQ 10     LEQ 99    (goto run2) 
if %%V GEQ 100    LEQ 999   (goto run3)
if %%V GEQ 1000   LEQ 9999  (goto run4)
cls

:run1
for /L %%V in (%num1%,1,%num2%) do (
IF %%V LSS 10 (call:Make_Dirs %name%-000%%V)
)
:run2
for /L %%V in (%num1%,1,%num2%) do (
IF %%V GEQ 10 IF %%V LEQ 99 (call:Make_Dirs %name%-00%%V)
)
:run3
for /L %%V in (%num1%,1,%num2%) do (
IF %%V GEQ 100 IF %%V LEQ 999 (call:Make_Dirs %name%-0%%V)
)

:run4
for /L %%V in (%num1%,1,%num2%) do (
IF %%V GEQ 1000 IF %%V LEQ 9999 (call:Make_Dirs %name%-%%V)
)
cls

:3
set name=
cls
echo. %titles%
echo.
echo 請輸入資料夾名稱:
set /p name=
echo.
echo.

for /F  %%V in ( MDs.txt ) do (
echo.建立子資料:"%%V" (call:Make_Dirs %name%)
 )
cls

:Make_Dirs
rem =======開 發 單 位 =======
mkdir %1\開發\APQP
mkdir %1\開發\CAD
mkdir %1\開發\mail紀錄
mkdir %1\開發\PCR
mkdir %1\開發\PPAP
mkdir %1\開發\包裝
mkdir %1\開發\成本
mkdir %1\開發\成績表
mkdir %1\開發\附件相片圖示
mkdir %1\開發\特採
mkdir %1\開發\異常
mkdir %1\開發\設計變更

rem =======品 管 單 位 =======
mkdir %1\品管\客訴
mkdir %1\品管\不良品統計
mkdir %1\品管\品質異常處理
mkdir %1\品管\圖片及CP
mkdir %1\品管\進料
mkdir %1\品管\出貨
mkdir %1\品管\量測資料
mkdir %1\品管\特採申請
mkdir %1\品管\產品定期稽核
mkdir %1\品管\CPKPPK
mkdir %1\品管\配合廠商

rem =======車 床 單 位 =======
mkdir %1\車床\SOP
mkdir %1\車床\機台程式

rem =======銑 床 單 位 =======
mkdir %1\銑床\SOP
mkdir %1\銑床\機台程式

rem =======後 加 工 單 位 =======
mkdir %1\後加工\SOP

此帖於 2013-12-09 10:49 PM 被 victor624 編輯.
victor624 目前離線  
送花文章: 0, 收花文章: 2 篇, 收花: 3 次
回覆時引用此帖
舊 2013-12-09, 06:49 PM   #9 (permalink)
管理員
 
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 金幣
預設

引用:
作者: victor624 查看文章
感謝getter指導
小弟目前還有一個疑問
選項3的第一層資料夾要帶入TXT檔建立
TXT檔內容是不連續號碼 例如

3323-119
3603-226
3603-227
3603-308
3603-309
3604-641
3604-647
3703-010
3703-011
3703-232
3703-233
3703-238
3703-239

然後第二層之後的資料夾 帶入:Make_Dirs的資料夾名稱
該如何改寫呢?? 再請指教 謝謝

語法:
...
...
...
for /F  %%V in ( MDs.txt ) do (
echo.建立子資料:"%%V" (call:Make_Dirs %name%)
 )
cls

...
...
...
1.txt 的內容是因為原本第一層資料夾名稱的號碼可能是不連號的關係嗎?
2.再來是用 for /f 的 參數沒有給當然會不行 ... 先參考一下我先前貼的那個
字典檔的法 ...

剩下的等我的屁屁(條狀物要大出來了 ... )好點再來詳細弄
getter 目前離線  
送花文章: 37855, 收花文章: 6441 篇, 收花: 26052 次
回覆時引用此帖
向 getter 送花的會員:
a471 (2013-12-09)
感謝您發表一篇好文章
舊 2013-12-09, 10:37 PM   #10 (permalink)
註冊會員
榮譽勳章

勳章總數
UID - 365055
在線等級: 級別:0 | 在線時長:3小時 | 升級還需:2小時
註冊日期: 2013-10-28
文章: 5
精華: 0
現金: 9 金幣
資產: 9 金幣
預設

引用:
作者: getter 查看文章
1.txt 的內容是因為原本第一層資料夾名稱的號碼可能是不連號的關係嗎?
2.再來是用 for /f 的 參數沒有給當然會不行 ... 先參考一下我先前貼的那個
字典檔的法 ...

剩下的等我的屁屁(條狀物要大出來了 ... )好點再來詳細弄

回 getter
我詳細說明這次新增的功能
首先選第3項 會要求輸入資料夾名稱(第一層) 假如是AAA
之後她會帶入TXT檔內部的資料夾名稱(第二層)
之後AAA底下會產生TXT的編號 TXT底下會帶出:Make_Dirs所有子資料夾

因為這些編號不連貫 所以必須透過TXT檔帶入
選項1-2功能不變 主要是給編號連續的時候使用的
請指教 謝謝!!

TXT內容
語法:
3323-119
3603-226
3603-227
3603-308
3603-309
3604-641
3604-647
3703-010
3703-011
3703-232
3703-233
3703-238
3703-239


0402-333
0402-354
0402-478
0402-909
0402-950
0402-951
0402-974
0402-984
0402-945
0403-039
0403-079
0404-170
0404-179
0404-199
0404-215
0404-218
0404-203
0404-207
0404-218
0404-219
0404-242
0404-247
0405-052
0405-062
0405-205
0405-219
0405-245
0405-263
0405-272
0405-319
0405-320
0405-340
0405-368
0405-379
0405-381
0405-383
0405-388
0405-440
0405-446
0409-066
0410-196
0410-200
0413-136
0413-145
0423-042
0423-359
0423-359
0423-393
0423-395
0423-411
0423-450
0436-355
0436-659
0441-893
0443-061
0443-063
0444-263
0444-264
0470-915
0470-918
0492-029
0492-075
0492-077
0492-078
0492-085
0492-090
0492-110
0492-111


0502-042
0502-164
0502-258	
0502-273
0502-321
0502-348
0502-421
0502-423
0502-517
0502-521
0502-522
0502-766
0502-797
0502-828
0502-833
0502-857
0502-967(1402-467)
0502-969(1402-485)
0502-970(1402-487)
0502-973(1402-499)
0502-976+8
0502-999
0503-040_041
0503-311(0403-155)
0503-321(0403-151)
0503-456+7
0503-462
0503-464
0503-483
0503-546+7
0503-628+9
0503-644
0503-748+9
0504-610
0504-651
0504-656+7
0504-676
0504-678
0504-746+9
0504-757
0505-414
0505-773+4
0505-776+7
0541-842
0544-010+011
0570-345


0605-713
0605-858
0605-906
0605-907
0605-908(1619-124)
0605-927
0605-928
0605-932
0605-943
0605-969
0607-711
0607-712
0607-716+717
0607-806_7
0608-610
0613-011
0613-012
0619-907
0630-273
0645-606
0645-632
0648-787
0675-030


0702-995
0708-577
0745-368
目前改寫後第二層之後資料夾可建立 但是第一層
手動輸入資料夾名稱 出不來 !!!

語法:
@Echo off
cd /d %~dp0 

@Echo off
set titles=大量新增資料夾 V6.0版
echo 大量新增資料夾 64.0版

TITLE=%titles%

Echo  ╔═════════════════╗
Echo  ║  編碼選擇:                      ║ 
Echo  ║ 1.後3碼 按1                      ║ 
Echo  ║ 2.後4碼 案2                      ║ 
Echo  ║ 3.載入TXT檔                      ║
Echo  ╙═════════════════╜
set /p x=請選擇→
if /I "%x%"=="1" goto :1
if /I "%x%"=="2" goto :2
if /I "%x%"=="3" goto :3
cd /d %~dp0 
echo 輸入錯誤
exit

:1
set num1=
set num2=
set name=
cls
echo. %titles%
echo.
echo 請輸入資料夾名稱:
set /p name=
echo.
echo.
echo 請輸入開始編號(1~999):
set /p num1=
echo 請輸入結束編號(1~999):
set /p num2=
if %%V LSS 10    (goto run5)

:run5
for /L %%V in (%num1%,1,%num2%) do (
IF %%V LSS 10 (call:Make_Dirs %name%-00%%V)
IF %%V GEQ 10 IF %%V LEQ 99 (call:Make_Dirs %name%-0%%V)
IF %%V GEQ 100 IF %%V LEQ 999 (call:Make_Dirs %name%-%%V)
)
cls
goto :eof

:2
set num1=
set num2=
set name=
cls
echo. %titles%
echo.
echo 請輸入資料夾名稱:
set /p name=
echo.
echo.
echo 請輸入開始編號(1~9999):
set /p num1=
echo 請輸入結束編號(1~9999):
set /p num2=
if %%V LSS 10    (goto run1) 
if %%V GEQ 10     LEQ 99    (goto run2) 
if %%V GEQ 100    LEQ 999   (goto run3)
if %%V GEQ 1000   LEQ 9999  (goto run4)
cls

:run1
for /L %%V in (%num1%,1,%num2%) do (
IF %%V LSS 10 (call:Make_Dirs %name%-000%%V)
)
:run2
for /L %%V in (%num1%,1,%num2%) do (
IF %%V GEQ 10 IF %%V LEQ 99 (call:Make_Dirs %name%-00%%V)
)
:run3
for /L %%V in (%num1%,1,%num2%) do (
IF %%V GEQ 100 IF %%V LEQ 999 (call:Make_Dirs %name%-0%%V)
)

:run4
for /L %%V in (%num1%,1,%num2%) do (
IF %%V GEQ 1000 IF %%V LEQ 9999 (call:Make_Dirs %name%-%%V)
)
cls

:3
cd /d %~dp0 
set name=
cls
echo. %titles%
echo.
echo 請輸入資料夾名稱:
set /p name=
echo.
echo.

for /F "eol=; skip=1 tokens=1 delims=," %%V in ( MDs.txt ) do (
call:Make_Dirs %%V
 )
cls

:Make_Dirs
rem =======開 發 單 位 =======
mkdir %1\開發\APQP
mkdir %1\開發\CAD
mkdir %1\開發\mail紀錄
mkdir %1\開發\PCR
mkdir %1\開發\PPAP
mkdir %1\開發\包裝
mkdir %1\開發\成本
mkdir %1\開發\成績表
mkdir %1\開發\附件相片圖示
mkdir %1\開發\特採
mkdir %1\開發\異常
mkdir %1\開發\設計變更

rem =======品 管 單 位 =======
mkdir %1\品管\客訴
mkdir %1\品管\不良品統計
mkdir %1\品管\品質異常處理
mkdir %1\品管\圖片及CP
mkdir %1\品管\進料
mkdir %1\品管\出貨
mkdir %1\品管\量測資料
mkdir %1\品管\特採申請
mkdir %1\品管\產品定期稽核
mkdir %1\品管\CPKPPK
mkdir %1\品管\配合廠商

rem =======車 床 單 位 =======
mkdir %1\車床\SOP
mkdir %1\車床\機台程式

rem =======銑 床 單 位 =======
mkdir %1\銑床\SOP
mkdir %1\銑床\機台程式

rem =======後 加 工 單 位 =======
mkdir %1\後加工\SOP

此帖於 2013-12-09 10:50 PM 被 victor624 編輯.
victor624 目前離線  
送花文章: 0, 收花文章: 2 篇, 收花: 3 次
回覆時引用此帖
向 victor624 送花的會員:
a471 (2013-12-10)
感謝您發表一篇好文章
舊 2013-12-10, 03:20 PM   #11 (permalink)
管理員
 
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 金幣
預設

引用:
作者: victor624 查看文章
回 getter
我詳細說明這次新增的功能
首先選第3項 會要求輸入資料夾名稱(第一層) 假如是AAA
之後她會帶入TXT檔內部的資料夾名稱(第二層)
之後AAA底下會產生TXT的編號 TXT底下會帶出:Make_Dirs所有子資料夾

因為這些編號不連貫 所以必須透過TXT檔帶入
選項1-2功能不變 主要是給編號連續的時候使用的
請指教 謝謝!!

TXT內容

也就是說就是 AAA\TXT內容\Make_Dirs意思嗎

語法:
@Echo off
setlocal
cd /d %~dp0 
set Version=6.0
set titles=大量新增資料夾 %Version% 版
set TXT_File=%~n0.txt
title=%titles%


:選單
cls
echo.%titles%:選單畫面
echo.╔═══════════╗
echo.║編碼選擇:            ║ 
echo.║ 1.後 3 碼,請按 1    ║ 
echo.║ 2.後 4 碼,請按 2    ║ 
echo.║ 3.載入 TXT 檔,請按 3║
echo.║                      ║
echo.║ 0.離開               ║
echo.╚═══════════╝
set /p select=請選擇:
set /a select=%select%
if %select% == 0 ( goto :End )
if %select% GTR 0 if %select% LEQ 3 ( cls & goto Function_%select% )
echo.輸入錯誤,請重新輸入
echo.
pause
goto :選單


:End
endlocal
exit


:Function_1
echo. %titles%:後 3 碼
call :Input
call :Run_Make_Continuous_Dir
goto :End


:Function_2
echo. %titles%:後 4 碼
call :Input
call :Run_Make_Continuous_Dir
goto :End


:Function_3
echo. %titles%:載入 TXT 檔
echo.
if not exist "%TXT_File%" ( 
   echo.找不到 %TXT_File% 的錯誤,執行終止。 
   echo.
   pause 
   goto :End
   )  
set /p name=請輸入資料夾名稱:
echo.
echo.
mkdir %name%
for /F "eol=; tokens=1 delims=." %%V in ( %TXT_File% ) do ( 
  call :Make_Dirs  "%name%\%%V" )
goto :End


:Input
echo.
set /p name=請輸入資料夾名稱:
echo.
:num-1
set /p num1=請輸入開始編號:
set /a num1=%num1%
if %select% == 1 ( if %num1% GTR 0 if %num1% LSS 1000 goto :num-2 ) & goto :num-1
if %select% == 2 ( if %num1% GTR 0 if %num1% LSS 10000 goto :num-2 ) & goto :num-1
:num-2
echo.
set /p num2=請輸入結束編號:
set /a num2=%num2%
if %select% == 1 ( if %num2% GTR %num1% if %num2% LSS 1000 goto :eof ) & goto :num-2
if %select% == 2 ( if %num2% GTR %num1% if %num2% LSS 10000 goto :eof ) & goto :num-2
goto :eof


:Run_Make_Continuous_Dir
for /L %%V in (%num1%,1,%num2%) do (
rem 後 3 碼方法
if %select% == 1 if %%V LSS 10  ( call :Make_Dirs "%name%-00%%V" )
if %select% == 1 if %%V GEQ 10  if %%V LSS 100  ( call :Make_Dirs "%name%-0%%V" )
if %select% == 1 if %%V GEQ 100 if %%V LSS 1000 ( call :Make_Dirs "%name%-%%V" )
rem 後 4 碼方法
if %select% == 2 if %%V LSS 10   ( call :Make_Dirs "%name%-000%%V" )
if %select% == 2 if %%V GEQ 10   if %%V LSS 100   ( call :Make_Dirs "%name%-00%%V" )
if %select% == 2 if %%V GEQ 100  if %%V LSS 1000  ( call :Make_Dirs "%name%-0%%V" )
if %select% == 2 if %%V GEQ 1000 if %%V LSS 10000 ( call :Make_Dirs "%name%-%%V" )
)
goto :eof


:Make_Dirs
if "%~1" == "" goto :eof
rem =======開 發 單 位 =======
mkdir "%~1\開發\APQP"
mkdir "%~1\開發\CAD"
mkdir "%~1\開發\mail紀錄"
mkdir "%~1\開發\PCR"
mkdir "%~1\開發\PPAP"
mkdir "%~1\開發\包裝"
mkdir "%~1\開發\成本"
mkdir "%~1\開發\成績表"
mkdir "%~1\開發\附件相片圖示"
mkdir "%~1\開發\特採"
mkdir "%~1\開發\異常"
mkdir "%~1\開發\設計變更"

rem =======品 管 單 位 =======
mkdir "%~1\品管\客訴"
mkdir "%~1\品管\不良品統計"
mkdir "%~1\品管\品質異常處理"
mkdir "%~1\品管\圖片及CP"
mkdir "%~1\品管\進料"
mkdir "%~1\品管\出貨"
mkdir "%~1\品管\量測資料"
mkdir "%~1\品管\特採申請"
mkdir "%~1\品管\產品定期稽核"
mkdir "%~1\品管\CPKPPK"
mkdir "%~1\品管\配合廠商"

rem =======車 床 單 位 =======
mkdir "%~1\車床\SOP"
mkdir "%~1\車床\機台程式"

rem =======銑 床 單 位 =======
mkdir "%~1\銑床\SOP"
mkdir "%~1\銑床\機台程式"

rem =======後 加 工 單 位 =======
mkdir "%~1\後加工\SOP"
goto :eof
大致上有測試過一些條件
1.要能依照那個意思建立資料夾,需要有正確的指令給予才行,如 mkdir %name% 以及
"%name%\%%V"。當然沒有給對,自然就沒有作用。
2.標籤的部份,可以使用中文,但是要注意系統的 CMD 本版是否有支援到,若怕不支援還是建議用英文編寫。
3.當以 3 號選項執行時,要注意一些事情,文字檔的部份可能,初期測試發現會在 \ 的位置有另外建立 資料夾,
此也加入 if "%~1" == "" goto :eof 的語法抑制。可能受不同的 CMD 版本有無作用要在注意。
4.TXT 檔名,目前設定是以 set TXT_File=%~n0.txt 控制著,需要與批次檔的主檔名相同的 .txt。
如 abc.bat 的話就要是 abc.txt 才能正常執行。
5.因為有使用 txt 檔,有加入 if not exist "%TXT_File%" 用來找尋,
有沒有 txt 檔的存在,有的話第 3 項才可以正常執行。
6.有關於 txt 檔的部份,一開始的行數是不回會跳過的。以『;』為註解符號,也就是說
『;』開頭的是註解,不會被讀入的。
7.有大幅調整一部分的語法,使用了某些如類似 java 的觀念,如單一功能的多行集合之類。具有數值的質範圍除錯的機能、
選單重回機制(這是基本選單該有的功能吧),使用了某種特殊的選單值域 goto 的方式,就不用一堆 goto :1~3。
數值輸入也有修改,有使用某種檢驗機制,就某些狀況來說有輸入的檢驗機制是對的,因此使用了數值化檢驗的方式。
如 set /a num=%num%,這個動作是把輸入的『字串的數字』變成了『數值的數字』,其實就是資料型態的轉換。
如 01 跟 1 的差別。以人的觀點來說不都是 1 嗎? 對電腦來說,卻是不一樣的,是數值的 1 還是文字的 1。在電腦內不
這兩著是完全不一樣的。數值的 1 可以作運算的,文字的 1 只有表示的作用。因此需要轉換。再進一步給 if 判斷,這樣
就比較不容易出錯了。
8."%~1" 這個目的,是為了避免 " 符號問題,在迪西的電腦測試,結果是不影響結果的。但別的電腦,可能因為不同的
CMD 或 Command.com 的版本不同而可能會不一樣。
9.在變數符號上面加上 " 符號,如 "%%1" 或是 "%num%"。是為了確保該變數傳遞的正確文字範圍,不會混到而外的
空白字符 。此外當變數內容需要有空白字符時,如 "abc 123",才會被確定是一個完整的資料,而不會被解讀成兩個資
料。

txt檔的大約內容如下
語法:
;3323-119 註解行
;3603-226 註解行
3603;227
; 註解行
3703-232
3703-233
3703-238
3703-239
總之就是測試 ... 多測試 ...

此帖於 2013-12-15 07:01 AM 被 getter 編輯. 原因: 補充
getter 目前離線  
送花文章: 37855, 收花文章: 6441 篇, 收花: 26052 次
回覆時引用此帖
有 2 位會員向 getter 送花:
a471 (2013-12-10),羅迪 (2013-12-19)
感謝您發表一篇好文章
舊 2013-12-11, 04:25 PM   #12 (permalink)
管理員
 
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 金幣
預設

有無幫助也要記得回貼文告知 ... 這是禮貌

辛苦貼文的人 ... 怎麼知道 ... 到底有無幫助 ...

不然當作斷頭文處裡吧 ...
getter 目前離線  
送花文章: 37855, 收花文章: 6441 篇, 收花: 26052 次
回覆時引用此帖
有 3 位會員向 getter 送花:
a471 (2013-12-11),grc45 (2013-12-13),羅迪 (2013-12-19)
感謝您發表一篇好文章
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 12:12 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1