使用 bat 批量创建带有项目前缀名的文件夹结构
在项目管理中,经常需要为每个新项目创建一套标准化的文件夹结构。如文档中所述,用户希望为每个项目(如"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. |
通过本文的详细解析和代码示例,读者可以全面了解如何使用批处理脚本创建具有项目前缀的文件夹结构。无论是简单的创建需求还是复杂的批量重命名场景,都能找到合适的解决方案。