当前位置: 首页 > news >正文

使用 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 - 当前批处理文件名

使用方法:

  1. 将脚本保存为CreateProject.bat
  2. 在命令行中执行: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

文件夹结构关系图

Project-1
project-1_export
project-1_LIBRARY
project-1_SUPPORT DOCUMENTS
project-1_DWG
project-1_IMAGES
project-1_PDF
project-1_ZIP
project-1_Scans
project-1_PDF
project-1_Client
project-1_Others

实现原理对比

特性简单脚本高级脚本
创建新结构✔️
重命名现有结构✔️
参数化输入命令行参数配置文件
处理子文件夹手动指定自动递归
灵活性
复杂度简单复杂

实际应用建议

  1. 新建项目结构:使用简单脚本方法,每次为新项目执行一次
  2. 批量重命名现有结构:使用高级脚本方法,自动化处理已有文件夹
  3. 扩展功能
    • 添加日志记录功能
    • 增加错误处理机制
    • 支持从配置文件读取结构定义

单词、短语表

单词(短语)音标词性词根/词缀释义搭配例子
batch file/bætʃ faɪl/n.batch(批量)+file(文件)批处理文件create batch fileI created a batch file to automate the process.
prefix/ˈpriːfɪks/n.pre-(前)+fix(固定)前缀variable prefixThe folders have a project name prefix.
subfolder/ˈsʌbˌfoʊldər/n.sub-(下)+folder(文件夹)子文件夹create subfolderHow 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 expansionUse delayed expansion to handle variables in loops.
recursive/rɪˈkɜːrsɪv/adj.re-(再)+curs(跑)递归的recursive folder scanThe script performs a recursive scan of all subfolders.
parameter/pəˈræmɪtər/n.para-(旁)+meter(测量)参数command line parameterPass the project ID as a command line parameter.

通过本文的详细解析和代码示例,读者可以全面了解如何使用批处理脚本创建具有项目前缀的文件夹结构。无论是简单的创建需求还是复杂的批量重命名场景,都能找到合适的解决方案。

http://www.lryc.cn/news/590022.html

相关文章:

  • 人工智能与机器人研究|深孔内表面缺陷特征内窥测量方法研究
  • Netty介绍和基本代码演示
  • 清理C盘方法
  • PyTorch中张量(TensorFlow)操作方法和属性汇总详解和代码示例
  • Postman接口
  • 【开源.NET】一个 .NET 开源美观、灵活易用、功能强大的图表库
  • GraphQL与REST在微服务接口设计中的对比分析与实践
  • Nacos 开源 MCP Router,加速 MCP 私有化部署
  • Linux开发利器:探秘开源,构建高效——基础开发工具指南(上)【包管理器/Vim】
  • 【Fastapi】Token验证与Postman模拟测试
  • HTTP REST API、WebSocket、 gRPC 和 GraphQL 应用场景和底层实现
  • IPv6
  • JavaScript进阶篇——第六章 内置构造函数与内置方法
  • qt 中英文翻译 如何配置和使用
  • AR智能巡检:电力行业数字化转型的“加速器”
  • 二分查找法
  • 力扣面试150(31/150)
  • 坐标系和相机标定介绍,张正友标定法原理,opencv标定
  • C++:现代 C++ 编程基石,C++11核心特性解析与实践
  • NLP:LSTM和GRU分享
  • NO.6数据结构树|二叉树|满二叉树|完全二叉树|顺序存储|链式存储|先序|中序|后序|层序遍历
  • 从零开始的云计算生活——番外4,使用 Keepalived 实现 MySQL 高可用
  • PyTorch 损失函数详解:从理论到实践
  • 《通信原理》学习笔记——第二章
  • Qt小组件 - 7 SQL Thread Qt访问数据库ORM
  • qt udp接收时 丢包
  • FreeRTOS学习笔记之任务调度
  • 《机器学习数学基础》补充资料:标准差与标准化
  • 《Qt信号与槽机制》详解:从基础到实践
  • Qt中实现文件(文本文件)内容对比