明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: liangwan001

[提问] LISP编程中将DWG文件内的一个字符串文字加到文件名字并重命名文件

  [复制链接]
 楼主| 发表于 2014-7-10 15:29:27 | 显示全部楼层
自贡黄明儒 发表于 2014-7-9 11:32
想法不错,有点类似我的分图http://bbs.mjtd.com/thread-108136-1-1.html

我借用了您分图的那个代码,我想改成不需要选择图形范围直接重命名文件。又因为可能有多个不同文件名的DWG文件中部件名称那一栏又是一样的,所以我将代码改动了一下,将需要提取的文字加到原有的文件名前面,这样避免重复的时候又要自己输入。我试过如果仅仅是改这里的话代码运行都没有问题,但是我想去掉图形范围选择,直接将文件名重命名,提示“错误:输入的列表有缺陷”,大神帮我看看是什么原因呢?然后'STR是什么意思呢?CAD不是我的专业,自己研究起来确实很困难。

  1. (defun C:ft (/ ANSWER EN FLAG FLAG1 INITDIR NEWDNAME EE)
  2.   (setq ee (GETVAR "DWGname"))
  3.   (if (setq Initdir (getvar "dwgprefix"))
  4.     nil
  5.     (progn (princ "\n 文件未保存,不能分图") (exit))
  6.   )
  7.   (setq flag1 T)
  8.   (while (and flag1
  9.         (setq en (entsel "\n >拾取文件名 "))
  10.         (setq en (nentselp (cadr en)))
  11.         (setq NewDName (cdr (assoc 1 (entget (car en)))))
  12.         (equal (type NewDName) 'STR)
  13.    )
  14.     (if  (findfile (strcat Initdir NewDName ee))
  15.       (setq flag T)
  16.     )
  17.     (while flag
  18.       (princ
  19.   (strcat "\n 文件名" NewDName "已经存在,请重输入文件名")
  20.       )
  21.       (setq NewDName (getstring "\n???输入文件名: "))
  22.       (if (findfile (strcat Initdir NewDName ee))
  23.   nil
  24.   (setq flag nil)
  25.       )
  26.     )
  27. (vl-file-rename (strcat Initdir ee) (strcat Initdir NewDName ee))
发表于 2014-7-10 23:12:12 | 显示全部楼层
liangwan001 发表于 2014-7-10 15:29
我借用了您分图的那个代码,我想改成不需要选择图形范围直接重命名文件。又因为可能有多个不同文件名的DW ...

楼主的问题,最主要的是如何获取器件名下的字符串,要根据这个字符串特有的属性才能获取,比如颜色、图层等等,如果这些特有的属性都没有,只能按照其位于图框特有的位置来,但楼主连个示意图都没有,怎么帮你解决问题?思路倒是有了,就差楼主怎么把“螺丝”这些字符串特有的属性给描述清楚,就可以了。
发表于 2014-7-11 10:58:27 | 显示全部楼层
只能说原来命名的人太坑爹
 楼主| 发表于 2014-7-14 20:15:10 | 显示全部楼层
借用坛友“自贡黄明儒”的一个代码,自己研究出来一个,可以用。具体功能自己试用一下就知道了
  1. ;;选择图内一个文本,添加到原文件名前面重命名并删除原文件
  2. (defun C:ft (/ ANSWER EN FLAG FLAG1 INITDIR NEWDNAME EE)
  3.   (setq ee (GETVAR "DWGname"))
  4.   (if (setq Initdir (getvar "dwgprefix"))
  5.     nil
  6.     (progn (princ "\n 文件未保存,不能分图") (exit))
  7.   )
  8.   (setq flag1 T)
  9.   (while (and flag1
  10.         (setq en (entsel "\n >拾取文件名 "))
  11.         (setq en (nentselp (cadr en)))
  12.         (setq NewDName (cdr (assoc 1 (entget (car en)))))
  13.         (equal (type NewDName) 'STR)
  14.               (setq flag T)
  15.    )
  16.     (if  (findfile (strcat Initdir NewDName ee))
  17.       (setq flag nil)
  18.     )
  19.     (while flag
  20.     (command "filedia" "0")
  21.     (command "_saveas" "LT2004" (strcat Initdir NewDName ee))
  22.     (vl-file-delete (strcat Initdir ee))
  23.     (command "filedia" "1")
  24.     (setq flag nil)         
  25.     )
  26.      (setq flag1 nil)
  27.   )
  28. )

点评

防身必备  发表于 2014-7-14 20:21
 楼主| 发表于 2014-7-14 20:29:39 | 显示全部楼层
自贡黄明儒 发表于 2014-7-9 11:32
想法不错,有点类似我的分图http://bbs.mjtd.com/thread-108136-1-1.html

特别感谢您的指教,目前这个问题已经解决了。借用您的代码,实现了点选图中字符串添加到文件名前重命名文件,并删除原文件。不过现在又遇到另外一个问题,希望您能指点一二http://bbs.mjtd.com/thread-110728-1-1.html
  1. (defun C:ft (/ ANSWER EN FLAG FLAG1 INITDIR NEWDNAME EE)
  2.   (setq ee (GETVAR "DWGname"))
  3.   (if (setq Initdir (getvar "dwgprefix"))
  4.     nil
  5.     (progn (princ "\n 文件未保存,不能分图") (exit))
  6.   )
  7.   (setq flag1 T)
  8.   (while (and flag1
  9.               (setq en (entsel "\n >拾取文件名 "))
  10.               (setq en (nentselp (cadr en)))
  11.               (setq NewDName (cdr (assoc 1 (entget (car en)))))
  12.               (equal (type NewDName) 'STR)
  13.               (setq flag T)
  14.          )
  15.     (if        (findfile (strcat Initdir NewDName ee))
  16.       (setq flag nil)
  17.     )
  18.     (while flag
  19.     (command "filedia" "0")
  20.     (command "_saveas" "LT2004" (strcat Initdir NewDName ee))
  21.     (vl-file-delete (strcat Initdir ee))
  22.     (command "filedia" "1")
  23.     (setq flag nil)         
  24.     )
  25.      (setq flag1 nil)
  26.   )
  27. )
发表于 2014-7-14 20:54:22 | 显示全部楼层
本帖最后由 langjs 于 2014-7-14 20:58 编辑

我有个批量改名程序,提取标题栏属性快的代号和零件名称两项作为DWG的文件名。稍微改一下就可以用,

楼主没提供图纸,无法测试

源码奉上,自己修改吧。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2014-7-15 09:48:58 | 显示全部楼层
langjs 发表于 2014-7-14 20:54
我有个批量改名程序,提取标题栏属性快的代号和零件名称两项作为DWG的文件名。稍微改一下就可以用,

楼主 ...

谢谢楼主的奉献!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-24 11:57 , Processed in 0.185082 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表