![]() |
批次新增資料夾與子資料夾
請問各位先進,我最近在幫公司做資料管理
需要一次建立大量的資料夾,而我之前有在論壇搜尋到相關的討論內容 整理了一下 寫出以下批次檔 但是有個問題,就是資料夾我在新增的時候,可能只需要某段編號 例如資料夾開頭為10- 編號可能是 3001~4115(4碼) 10-3001~10-4115 或者 開頭是1400- 編號是 200~311(3碼) 1400-200~1400-311 這要如何修改? 請各位先進指導 謝謝!! 語法:
|
這樣是不行的 因為沒有充分利用變量 ... 也就是變數
有些變數也可能有設定錯誤或是 IF 或 FOR 的使用錯誤? 視情況相同條件的 IF 一個就夠了,如 語法:
IF %%V LSS 10 ( 如果說 很多條件的 IF 內可使用的命令內容是一樣的話或多行相同的部分,可以改成片段呼叫或批次檔呼叫的方式。 這樣就可以把很多重複的部份可簡化掉了,日後若要小改一些地方也不會說改到吐血 語法:
for /L %%V in (1,1,99) do ( 但是這個批次檔到目前為止,只是單純從 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 |
若是依照迪西想的那種資料夾結構 ... 批次檔不用寫的這麼囉說 說不定連 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 2.手動把 AA-bbbb~AA-cccc 的資料夾名稱改成想要的就可以了。 |
謝謝 getter 指教!
我參考您跟朋友改的範例,再次改寫 語法:
|
引用:
txt必須把第一層資料夾也寫進去 我建立的資料夾一次幾乎都破千個 這樣就等於一次要寫好幾千筆資料了 |
引用:
此外也可以利用 for /F 的強化指令去作字典檔的模式來作建立資料夾的控制 ... 基本上已經有一個地方有作 IF check 的話就不用去作第二次的 IF check 可以再幾個地方多些檢驗的機制 語法:
@echo off |
用 for /F 的字典檔方式
語法:
字典檔需要與批次檔在一起,MDs.txt 字典檔 的內容 語法:
;MDs.txt 字典檔 字典檔的方式主要是依照 FOR /F "eol=; skip=1 tokens=1 delims=," 的控制敘述 /F 表示開啟 FOR 的讀檔模式 " " 表示為 /F 的進階控制參數 eol=; 表示 ; 號之後的該行文字敘述為「註解」。 skip=3 表示一開始跳過的行數。 tokens=1 是對應的 FOR 的 %%V 參數的對應個數,詳細請參考 FOR /? 。 delims=, 表示 , 是用來決定單行資料區分,幾個區分斷的符號,當不輸入的話,以 預設值為空白、tab 符號為區隔。 詳細請參考 FOR /? 。 |
感謝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 |
引用:
2.再來是用 for /f 的 參數沒有給當然會不行 ... 先參考一下我先前貼的那個 字典檔的法 ... 剩下的等我的屁屁(條狀物要大出來了 ... :on_36:)好點再來詳細弄 |
引用:
回 getter 我詳細說明這次新增的功能 首先選第3項 會要求輸入資料夾名稱(第一層) 假如是AAA 之後她會帶入TXT檔內部的資料夾名稱(第二層) 之後AAA底下會產生TXT的編號 TXT底下會帶出:Make_Dirs所有子資料夾 因為這些編號不連貫 所以必須透過TXT檔帶入 選項1-2功能不變 主要是給編號連續的時候使用的 請指教 謝謝!! TXT內容 語法:
手動輸入資料夾名稱 出不來 !!! 語法:
@Echo off |
引用:
也就是說就是 AAA\TXT內容\Make_Dirs意思嗎 語法:
@Echo off 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 註解行 |
有無幫助也要記得回貼文告知 ... 這是禮貌
辛苦貼文的人 ... 怎麼知道 ... 到底有無幫助 ... 不然當作斷頭文處裡吧 ... |
所有時間均為台北時間。現在的時間是 11:40 AM。 |
Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.
『服務條款』
* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *