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

AutoLISP需求:移除图层名称中的_1/_2,保留其余下划线

批量重命名CAD图层:仅移除_1和_2子串

原代码的问题在于它把下划线、1、2这三个字符单独替换成空格后删除,导致所有下划线都被移除。要实现仅删除_1和_2这两个完整子串,我们需要精准匹配并替换这两个子串,而不是单个字符。

以下是修改后的AutoLISP代码:

(vl-load-com)
(defun C:SLPC (/ layname fixed); = 批量移除图层名中的_1和_2子串
  (vlax-for layer (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))) 
    (setq
      layname (vla-get-name layer)
      fixed layname ; 复制原始图层名作为初始值
    )
    ; 循环替换所有_1子串为空
    (while (wcmatch fixed "*_1*")
      (setq fixed (vl-string-subst "" "_1" fixed))
    )
    ; 循环替换所有_2子串为空
    (while (wcmatch fixed "*_2*")
      (setq fixed (vl-string-subst "" "_2" fixed))
    )
    ; 验证新图层名合法性:不重复、非空、与原名称不同
    (if
      (and
        (not (tblsearch "layer" fixed))
        (/= fixed "")
        (/= fixed layname)
      )
      (vla-put-name layer fixed) ; 执行重命名
    )
  )
  (princ "\n图层重命名完成!")
  (princ)
)

关键修改说明

  • 替换逻辑:放弃字符级替换,改为针对_1和_2完整子串的循环替换,确保只删除目标内容,保留其他下划线和字符
  • 合法性检查:新增(/= fixed layname)判断,避免对不含目标子串的图层执行无意义操作
  • 操作反馈:添加完成提示,方便确认任务执行状态

内容的提问来源于stack exchange,提问作者Pezza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:00:17