![]() |
|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
![]() ![]() |
|
主題工具 | 顯示模式 |
|
![]() |
#1 (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,
![]() |
![]() |
#2 (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 金幣
![]() |
![]() |
#3 (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,
![]() |
![]() |
#4 (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,
![]() |
![]() |
#5 (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 金幣
![]() |
![]() |
#6 (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,
![]() |
![]() |
#7 (permalink) | |
管理員
![]() ![]() |
![]() 引用:
2.再來是用 for /f 的 參數沒有給當然會不行 ... 先參考一下我先前貼的那個 字典檔的法 ... 剩下的等我的屁屁(條狀物要大出來了 ... ![]() |
|
![]() |
送花文章: 37855,
![]() |
向 getter 送花的會員:
|
![]() |
#8 (permalink) | |
註冊會員
|
![]() 引用:
回 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 編輯. |
|
![]() |
送花文章: 0,
![]() |
向 victor624 送花的會員:
|
![]() |
#9 (permalink) | |
註冊會員
|
![]() 引用:
txt必須把第一層資料夾也寫進去 我建立的資料夾一次幾乎都破千個 這樣就等於一次要寫好幾千筆資料了 |
|
![]() |
送花文章: 0,
![]() |