Batch file 批处理文件以创建具有可变前缀的文件夹
我正在尝试使用前缀批量创建文件夹,其中前缀是项目名称。我不知道实现以下结果的最佳方法是什么。提前谢谢。示例如下: 项目名称=项目1Batch file 批处理文件以创建具有可变前缀的文件夹,batch-file,directory,prefix,Batch File,Directory,Prefix,我正在尝试使用前缀批量创建文件夹,其中前缀是项目名称。我不知道实现以下结果的最佳方法是什么。提前谢谢。示例如下: 项目名称=项目1 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\proje
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
set /p id= Enter Project ID?
for /f "tokens=*" %%a in (file.txt) do (
mkdir %id%_"%%a"
)
项目名称=项目2
project-2_export\project-2_DWG
project-2_export\project-2_IMAGES
project-2_export\project-2_PDF
project-2_export\project-2_ZIP
project-2_LIBRARY
project-2_SUPPORT DOCUMENTS\project-2_Scans
project-2_SUPPORT DOCUMENTS\project-2_PDF\project-2_Client
project-2_SUPPORT DOCUMENTS\project-2_PDF\project-2_Others
这是我在浏览此处资源后的尝试。
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
set /p id= Enter Project ID?
for /f "tokens=*" %%a in (file.txt) do (
mkdir %id%_"%%a"
)
其中“file.txt”包含文件夹和子文件夹的名称列表。项目ID为项目1/2/3 我的问题是 我使用文本文件创建文件夹没有问题,但我不知道如何使用它创建子文件夹。可能吗
如果是,如何将项目id前缀放在子文件夹名称前面?CreateProject.bat
@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 to create the folderstructure for a project 1, type:
echo %~n0 1
使用项目编号(或名称?)作为参数调用它:
createproject 1234
查看文件夹,我假设您希望根据主
project 35;
目录重命名树中的所有文件。下面是一个示例树:
C:\MainFolder
├───project1
│ ├───export
│ │ ├───DWG
│ │ ├───Images
│ │ ├───PDF
│ │ └───ZIP
│ └───support documents
└───project2
├───export
│ ├───DWG
│ ├───Images
│ ├───PDF
│ └───ZIP
└───support documents
我们可以使用一系列for
循环,使用dir“Path\*”/b/s/a:d
收集每个文件夹的信息。这将允许我们从受尊重的MainDir
-->ProjectX
获取每个文件夹。从这里,我们只需将ProjectX
文件夹后面的树重命名为ProjectX\u OriginalFolderName
格式。这将给我们带来新的各自的树吼声
C:\MainFolder
├───project1
│ ├───project1_export
│ │ ├───project1_DWG
│ │ ├───project1_Images
│ │ ├───project1_PDF
│ │ └───project1_ZIP
│ └───project1_support documents
└───project2
├───project2_export
│ ├───project2_DWG
│ ├───project2_Images
│ ├───project2_PDF
│ └───project2_ZIP
└───project2_support documents
下面的脚本将解决您的所有问题。请查看每个Rem | Note
,了解脚本中每个进程的更多信息。此外,您还需要将设置“MainDir=C:\MainFolderLocation”
更改为您所尊重的包含project\
文件夹的目录
为了增加安全性,我还添加了一个集“MustContain=project”
,这样脚本将只修改文件树的who'sproject
containsproject
。如果此目录中有其他文件夹(C:\MainFolderLocation
),则不会触及不包含project的文件夹。如果这不是您想要的,并且您希望完全调整此目录中的所有内容,则删除Rem |检查当前文件夹是否包含ProjectX
for循环
EditFolderTree.bat:
@ECHO OFF
@setlocal EnableDelayedExpansion
Rem | Configuration
Set "MainDir=C:\MainFolderLocation"
Set "MustContain=project"
Rem | Get Each Project Folder
for /f "tokens=*" %%A in ('dir "!MainDir!\" /b /a:d') do (
Set "MainFolder=%%~nA"
Rem | Check If Current Folder Contains ProjectX
for /f "tokens=*" %%B in ('echo !MainFolder!^| find /I "!MustContain!"') do (
Set "BaseFolderName=%%~nB"
Rem | Get Each Folder In ProjectX Dir
for /f "tokens=*" %%C in ('dir "!MainDir!\!BaseFolderName!\*" /b /s /a:d') do (
Set "FolderName=%%C"
Rem | Check If Current Folder Already has ProjectX_
for /f "tokens=*" %%D in ('echo !FolderName!^| find /V "!BaseFolderName!_"') do (
Rem | Save Results To File
Echo %%D >> DataFile.temp
)
)
)
)
Rem | Check If DataFile.temp Exists
If exist "%~dp0DataFile.temp" (
Rem | Reverse Tree From TextFile
for /F "tokens=*" %%A in (DataFile.temp) do (
set /A I=!I! + 1
set LINE!I!=%%A
)
Del %~dp0DataFile.temp
for /L %%A in (!I!,-1,1) do (
echo !LINE%%A! >> DataFile.temp
)
Rem | Read TextFile & Get Paths
for /F "tokens=*" %%A in (DataFile.temp) do (
Set "FolderName=%%~nA"
Rem | Get project Number
Set "String=%%A"
Set "String=!String:%MainDir%\=!"
for /F "tokens=1,2* delims=\" %%B in ('Echo !String!') do (
Set "BaseFolderName=%%B"
)
Rem | Rename Folders
CD "%%A\.."
rename "!FolderName!" "!BaseFolderName!_!FolderName!"
)
Del %~dp0DataFile.temp
)
goto :EOF
有关任何命令的帮助,请执行以下操作:
呼叫/?
设置/?
获取/?
如果/?
查找/?
- 等等
createproject.bat
放入主文件夹,并使用createproject 5
执行它(从命令行),其中5是您所需的项目id。最后在命令行上运行它。虽然这不完全是我想要的,但我会进一步研究,并根据我的情况调整一些东西。再次谢谢你。