You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量遍历父目录下百余个自文件夹处理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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:49:07