史萊姆論壇

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

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

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

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

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, 04:35 PM   #5 (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   #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 金幣
預設 用 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   #7 (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-10-31, 12:11 PM   #8 (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)
感謝您發表一篇好文章
發文 回覆



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

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


所有時間均為台北時間。現在的時間是 01:04 AM


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


SEO by vBSEO 3.6.1