批量遍历父目录下百余个自文件夹处理DWG文件的AutoCAD shp导出脚本优化需求及循环语法疑问
批量遍历父目录下百余个自文件夹处理DWG文件的AutoCAD shp导出脚本优化需求及循环语法疑问
嗨,作为刚接触脚本3天的新手,你能写出这样的逻辑已经很棒啦!咱们一步步解决你的问题:
一、脚本优化:递归遍历所有子文件夹的DWG文件
你的原脚本只处理D:\AutoRunLisp_setup\Run根目录下的DWG,要遍历所有子文件夹,需要用批处理的for /r递归遍历命令。同时要注意:创建的_input文件夹应该和对应DWG文件在同一个目录下,而不是都放在Run根目录,避免文件混乱。
修改后的完整脚本如下:
@echo off set "root_dir=D:\AutoRunLisp_setup\Run" set "scr_file=D:\AutoRunLisp_setup\Run\mapexport.scr" set "acad_path=C:\Program Files\Autodesk\AutoCAD 2023\acad.exe" :: 递归遍历root_dir下所有子文件夹中的.dwg文件 for /r "%root_dir%" %%f in (*.dwg) do ( :: 启动AutoCAD处理当前DWG文件 "%acad_path%" "%%f" /b "%scr_file%" :: 在当前DWG所在目录创建以DWG文件名命名的_input文件夹 set "input_folder=%%~dpf%%~nf_input" mkdir "%input_folder%" 2>nul :: 2>nul避免文件夹已存在时的报错 :: 移动导出的shp相关文件到对应_input文件夹 move "%%~dpfcz_proiectata*.*" "%input_folder%" 2>nul move "%%~dpfaerian*.*" "%input_folder%" 2>nul move "%%~dpfsubteran*.*" "%input_folder%" 2>nul move "%%~dpfax_drum*.*" "%input_folder%" 2>nul move "%%~dpfcabinete*.*" "%input_folder%" 2>nul move "%%~dpfcam_proiectate*.*" "%input_folder%" 2>nul move "%%~dpftalpi_proiectati*.*" "%input_folder%" 2>nul move "%%~dpftalpi_existenti*.*" "%input_folder%" 2>nul :: 等待AutoCAD处理完成(可根据实际情况调整超时时间) timeout 5 >nul ) :: 删除Run目录下所有.bak文件 del "%root_dir%\*.bak" 2>nul
关键改动说明:
- 用
for /r "%root_dir%" %%f in (*.dwg)实现递归遍历所有子文件夹的DWG文件 - 用
%%~dpf提取当前DWG文件所在的完整路径,%%~nf提取DWG文件名,组合成对应_input文件夹的路径 - 加
2>nul屏蔽“文件已存在”“文件夹已存在”的冗余报错,让脚本运行更干净 - 用变量统一管理路径,后续修改更方便
二、三个for循环语法的区别
这三个写法的核心差异在于匹配的文件范围和路径:
for %%f in (D:\AutoRunLisp_setup\Run\*.dwg):仅匹配D:\AutoRunLisp_setup\Run根目录下的所有.dwg文件,不会遍历子文件夹for %%f in (*.dwg):仅匹配脚本当前运行目录下的所有.dwg文件,不会遍历子文件夹(比如你双击脚本时,运行目录就是脚本所在的文件夹)for %%f in (*.*):仅匹配脚本当前运行目录下的所有类型文件(不管扩展名),不会遍历子文件夹
三、类似场景的思路参考
这类批量文件处理的需求很常见,给你几个实用的思路:
- 路径变量复用:像脚本里的
root_dir一样,把固定路径定义成变量,后期修改不用逐行找 - 条件判断:如果需要跳过某些已处理的文件夹,可以加
if not exist "%input_folder%"判断,避免重复处理 - 批量移动简化:如果导出的shp文件都是同一前缀或后缀,可以用通配符简化,比如
move "%%~dpf*_proiectata*.*" "%input_folder%" - 日志记录:可以加
echo 处理文件:%%f >> process_log.txt,把处理过的文件记录到日志里,方便后期排查问题
备注:内容来源于stack exchange,提问作者Benciu Silviu Ştefan
相关产品推荐
相关产品推荐

