![]() |
|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
![]() ![]() |
|
主題工具 | 顯示模式 |
|
![]() |
#1 |
註冊會員
|
![]() 請問各位先進,我最近在幫公司做資料管理
需要一次建立大量的資料夾,而我之前有在論壇搜尋到相關的討論內容 整理了一下 寫出以下批次檔 但是有個問題,就是資料夾我在新增的時候,可能只需要某段編號 例如資料夾開頭為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) ) |
![]() |
送花文章: 0,
![]() |
![]() |
#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,
![]() |
![]() |
#3 (permalink) |
管理員
![]() ![]() |
![]() 若是依照迪西想的那種資料夾結構 ... 批次檔不用寫的這麼囉說 說不定連 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.. 2.手動把 AA-bbbb~AA-cccc 的資料夾名稱改成想要的就可以了。 |
![]() |
送花文章: 37855,
+20 金幣
![]() |
![]() |
#4 (permalink) |
註冊會員
|
![]() 謝謝 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 |
![]() |
送花文章: 0,
![]() |
![]() |
#5 (permalink) | |
管理員
![]() ![]() |
![]() 引用:
此外也可以利用 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 編輯. |
|
![]() |
送花文章: 37855,
![]() |
![]() |
#6 (permalink) |
管理員
![]() ![]() |
![]() 語法:
@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 編輯. |
![]() |
送花文章: 37855,
+20 金幣
![]() |
![]() |
#7 (permalink) |
註冊會員
|
![]() 感謝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 編輯. |
![]() |
送花文章: 0,
![]() |
![]() |
#8 (permalink) | |
註冊會員
|
![]() 引用:
txt必須把第一層資料夾也寫進去 我建立的資料夾一次幾乎都破千個 這樣就等於一次要寫好幾千筆資料了 |
|
![]() |
送花文章: 0,
![]() |