在項目管理中,經常需要為每個新項目創建一套標準化的文件夾結構。如文檔中所述,用戶希望為每個項目(如"Project 1"、“Project 2”)創建以下結構的文件夾:
project-1_export\project-1_DWG
project-1_export\project-1_IMAGES
project-1_export\project-1_PDF
project-1_export\project-1_ZIP
project-1_LIBRARY
project-1_SUPPORT DOCUMENTS\project-1_Scans
project-1_SUPPORT DOCUMENTS\project-1_PDF\project-1_Client
project-1_SUPPORT DOCUMENTS\project-1_PDF\project-1_Others
解決方案分析
方法一:簡單批處理腳本
@echo off
if "%~1" == "" goto :help
md "project-%~1_export\project-%~1_DWG"
md "project-%~1_export\project-%~1_IMAGES"
md "project-%~1_export\project-%~1_PDF"
md "project-%~1_export\project-%~1_ZIP"
md "project-%~1_LIBRARY"
md "project-%~1_SUPPORT DOCUMENTS\project-%~1_Scans"
md "project-%~1_SUPPORT DOCUMENTS\project-%~1_PDF\project-%~1_Client"
md "project-%~1_SUPPORT DOCUMENTS\project-%~1_PDF\project-%~1_Others"
goto :eof
:help
echo 使用方法:輸入項目編號創建文件夾結構,例如:
echo %~n0 1
中文注釋說明:
@echo off
- 關閉命令回顯,使輸出更簡潔if "%~1" == "" goto :help
- 如果沒有傳入參數,跳轉到幫助部分md
- 創建目錄命令%~1
- 第一個傳入的參數(項目編號):help
- 幫助標簽%~n0
- 當前批處理文件名
使用方法:
- 將腳本保存為
CreateProject.bat
- 在命令行中執行:
CreateProject 1234
(1234為項目編號)
方法二:高級批處理腳本
@ECHO OFF
@setlocal EnableDelayedExpansionRem | 配置部分
Set "MainDir=C:\Projects" Rem | 設置主目錄路徑
Set "MustContain=project" Rem | 設置必須包含的關鍵字Rem | 獲取每個項目文件夾
for /f "tokens=*" %%A in ('dir "!MainDir!\" /b /a:d') do (Set "MainFolder=%%~nA"Rem | 檢查當前文件夾是否包含項目關鍵字for /f "tokens=*" %%B in ('echo !MainFolder!^| find /I "!MustContain!"') do (Set "BaseFolderName=%%~nB"Rem | 獲取項目目錄下的每個文件夾for /f "tokens=*" %%C in ('dir "!MainDir!\!BaseFolderName!\*" /b /s /a:d') do (Set "FolderName=%%C"Rem | 檢查當前文件夾是否已有項目前綴for /f "tokens=*" %%D in ('echo !FolderName!^| find /V "!BaseFolderName!_"') do (Echo %%D >> DataFile.temp Rem | 將結果保存到臨時文件)))
)Rem | 檢查臨時文件是否存在
If exist "%~dp0DataFile.temp" (Rem | 反轉文件夾樹結構for /F "tokens=*" %%A in (DataFile.temp) do (set /A I=!I! + 1set LINE!I!=%%A)Del %~dp0DataFile.tempfor /L %%A in (!I!,-1,1) do (echo !LINE%%A! >> DataFile.temp)Rem | 讀取臨時文件并處理路徑for /F "tokens=*" %%A in (DataFile.temp) do (Set "FolderName=%%~nA"Set "String=%%A"Set "String=!String:%MainDir%\=!"Rem | 獲取項目編號for /F "tokens=1,2* delims=\" %%B in ('Echo !String!') do (Set "BaseFolderName=%%B")Rem | 重命名文件夾CD "%%A\.."rename "!FolderName!" "!BaseFolderName!_!FolderName!")Del %~dp0DataFile.temp
)
goto :EOF
文件夾結構關系圖
實現原理對比
特性 | 簡單腳本 | 高級腳本 |
---|---|---|
創建新結構 | ?? | ? |
重命名現有結構 | ? | ?? |
參數化輸入 | 命令行參數 | 配置文件 |
處理子文件夾 | 手動指定 | 自動遞歸 |
靈活性 | 低 | 高 |
復雜度 | 簡單 | 復雜 |
實際應用建議
- 新建項目結構:使用簡單腳本方法,每次為新項目執行一次
- 批量重命名現有結構:使用高級腳本方法,自動化處理已有文件夾
- 擴展功能:
- 添加日志記錄功能
- 增加錯誤處理機制
- 支持從配置文件讀取結構定義
單詞、短語表
單詞(短語) | 音標 | 詞性 | 詞根/詞綴 | 釋義 | 搭配 | 例子 |
---|---|---|---|---|---|---|
batch file | /b?t? fa?l/ | n. | batch(批量)+file(文件) | 批處理文件 | create batch file | I created a batch file to automate the process. |
prefix | /?pri?f?ks/ | n. | pre-(前)+fix(固定) | 前綴 | variable prefix | The folders have a project name prefix. |
subfolder | /?s?b?fo?ld?r/ | n. | sub-(下)+folder(文件夾) | 子文件夾 | create subfolder | How to create subfolders automatically? |
token | /?to?k?n/ | n. | - | 標記 | tokens=* | Use “tokens=*” to get the whole line. |
delayed expansion | /d??le?d ?k?sp?n??n/ | n. | delay(延遲)+expand(擴展) | 延遲擴展 | enable delayed expansion | Use delayed expansion to handle variables in loops. |
recursive | /r??k??rs?v/ | adj. | re-(再)+curs(跑) | 遞歸的 | recursive folder scan | The script performs a recursive scan of all subfolders. |
parameter | /p??r?m?t?r/ | n. | para-(旁)+meter(測量) | 參數 | command line parameter | Pass the project ID as a command line parameter. |
通過本文的詳細解析和代碼示例,讀者可以全面了解如何使用批處理腳本創建具有項目前綴的文件夾結構。無論是簡單的創建需求還是復雜的批量重命名場景,都能找到合適的解決方案。