批处理文件读取文本行批量替换变量创建目录的问题
解决批处理循环读取文本创建文件夹的问题
你已经找对了核心思路,但问题出在循环变量的作用范围和路径引号的错误使用上。批处理的for循环变量%%a只能在循环体的括号内部生效,你之前把创建文件夹的代码放在了循环外面,这时候%%a已经失效,自然会出现名称错误的问题。另外,你原来的路径写法里引号位置混乱,也会导致文件夹名称异常。
下面是修正后的完整代码,直接替换你原来的脚本即可:
@echo off SET "filesNOTES=Files\Notes" SET "rootPATH=G:\My Drive\Company\Projects\Project1\Project1-1\Project1-1-1\Workflow\Generic Content" :: 循环读取ProductList.txt的每一行,作为父文件夹名称 for /f "delims=" %%a in (ProductList.txt) do ( :: 创建父文件夹 mkdir "%%a" :: 创建各级子文件夹 mkdir "%%a\Content" mkdir "%%a\Files\Final Deliverables" mkdir "%%a\Files\Illustrator Files" mkdir "%%a\%filesNOTES%" mkdir "%%a\Files\Working PDFs" mkdir "%%a\Product Photos\Finals" mkdir "%%a\Product Photos\PSDs" :: 生成FontInfo.txt并写入内容 echo %%a>"%%a\%filesNOTES%\FontInfo.txt" type "%rootPATH%\FontInfo.txt">>"%%a\%filesNOTES%\FontInfo.txt" :: 生成Mockup Notes.txt并写入内容 echo %%a>"%%a\%filesNOTES%\Mockup Notes.txt" )
关键修改点说明:
- 循环范围调整:把所有创建文件夹和写入文件的操作都放到
do (...)的括号内部,这样每次循环都能正确使用当前行的%%a作为父文件夹名称。 - 引号规范使用:所有路径都用双引号括起来(比如
"%%a\Files\Final Deliverables"),避免路径中的空格导致命令解析错误;定义变量时也用SET "变量名=值"的格式,防止意外的空格干扰变量值。 - 冗余代码移除:你原来的代码里重复执行了
mkdir %directoryNAME%\Files\Notes,我已经去掉了重复的部分。 - echo命令优化:把
echo > 文件和echo 内容> 文件合并成一行,简化代码逻辑,避免多余的空行。
这样运行脚本后,就会自动读取ProductList.txt里的每一行名称,依次创建对应的父文件夹和子文件夹结构了。
内容的提问来源于stack exchange,提问作者Austin Duncan
相关产品推荐
相关产品推荐

