明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1406|回复: 9

求逐一打开某文件夹中的DWG文件并修改保存的代码

[复制链接]
发表于 2014-8-6 09:04 | 显示全部楼层 |阅读模式
10明经币
一个文件夹A中有几十个DWG文件,我想用代码打开第1个DWG文件、炸开其中名称左侧为“BLOCK”的块参照,再保存关闭,再打开第二个DWG、炸开其中名称左侧为“BLOCK”的块参照,再保存关闭.如此不断循环,直到该文件夹都执行了这样的操作。
请高手帮忙写一个,LISP或VBA均可
下面传上一

个示例文件夹:

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

最佳答案

查看完整内容

;;_把代码保存LSP,加载到CAD的启动组,执行命令test ;;_2014年8月7日 获取指定目录下的DWG文件,批量执行操作(打开文件-->分解块block1-->保存) GoodLuck
发表于 2014-8-6 09:04 | 显示全部楼层
本帖最后由 gufeng 于 2014-8-7 09:29 编辑

;;_把代码保存LSP,加载到CAD的启动组,执行命令test
;;_2014年8月7日  获取指定目录下的DWG文件,批量执行操作(打开文件-->分解块block1-->保存) GoodLuck
  1. (defun c:Test(/ FILE_LIST FOLD SF SFF RunNow QF_GETFOLDER GETFILELIST PATH-ADDBACKSLASH)
  2. (vl-load-com)
  3. ;_Thanks caoyin
  4. ;_http://bbs.mjtd.com/dispbbs.asp?BoardID=3&ID=69986&replyID=&skin=0
  5. (defun GetFileList (dirName / files lst)
  6. (defun path-addBackSlash (path)
  7. (if (not (member (substr path (strlen path)) '("\" "/")))
  8. (strcat path "\")
  9. path
  10. )
  11. )
  12. (setq dirName (path-addBackSlash dirName)
  13. files (mapcar '(lambda (x) (strcat dirName x))
  14. (vl-directory-files dirName "*.dwg" 1)
  15. )
  16. )
  17. (mapcar '(lambda (x)
  18. (setq lst (append lst (GetFileList (strcat dirName x))))
  19. )
  20. (vl-remove-if
  21. '(lambda (x) (member x '("." "..")))
  22. (vl-directory-files dirName nil -1)
  23. )
  24. )
  25. (append files lst)
  26. )
  27. ;; 本代码仅提供作为应用上的参考, 而未声明或隐含任何保证; 对于任何特殊
  28. ;; 用途之适应性, 以及商业销售所隐含作出的保证, 在此一概予以否认.
  29. ;; ========================================================
  30. ;; 作者:秋枫,参考了灯火的VBA程序
  31. ;; 用法:(qf_getFolder msg)
  32. ;; 例子:(qf_getFolder "选择文件夹:")
  33. ;; 返回值:字符串,文件夹路径,如果点了cancel, 返回nil
  34. ;; http://www.mjtd.com/Functions/ArticleShow.asp?ArticleID=302
  35. (defun qf_getFolder (msg / WinShell shFolder path catchit)
  36. (vl-load-com)
  37. (setq winshell (vlax-create-object "Shell.Application"))
  38. (setq shFolder (vlax-invoke-method WinShell 'BrowseForFolder 0 msg 1))
  39. (setq
  40. catchit (vl-catch-all-apply
  41. '(lambda ()
  42. (setq shFolder (vlax-get-property shFolder 'self))
  43. (setq path (vlax-get-property shFolder 'path))
  44. )
  45. )
  46. )
  47. (if (vl-catch-all-error-p catchit)
  48. nil
  49. path
  50. )
  51. )
  52. (setq fold (qf_getFolder "选择文件所在目录:"))
  53. (if fold
  54. (progn
  55. (setq file_list (GetFileList fold))
  56. (if file_list
  57. (progn
  58. (setq sf (strcat (getvar "TEMPPREFIX") "批处理文件201408.scr"))
  59. (setq sff (open sf "w"))
  60. (mapcar '(lambda (x)
  61. (princ (strcat "open "" x ""\n" "(explode_block1) qsave close\n") sff)
  62. )
  63. file_list
  64. )
  65. (close sff)
  66. (princ (strcat "\n目录下" fold "\n\t共有DWG文件数: " (itoa (length file_list))))
  67. (initget "Y N")
  68. (setq RunNow (getkword "\n是否立刻执行[是(Y)/否(N)]:<否>"))
  69. (if (= RunNow "Y")
  70. (progn
  71. (command "._script" sf)
  72. (princ "\n处理完成")
  73. )
  74. (princ "\n放弃立刻执行")
  75. )
  76. )
  77. (princ "\n目录下没有DWG文件")
  78. )
  79. )
  80. (princ "\n请选择目录")
  81. )
  82. (princ)
  83. )
  84. (defun explode_block1 (/ OLDQAFLAGS SS)
  85. (setq ss (ssget "x" '((0 . "INSERT") (2 . "BLOCK1"))));_分解的块名  BLOCK1
  86. (if ss
  87. (progn
  88. (setq oldQAFLAGS (getvar "QAFLAGS"))
  89. (setvar "QAFLAGS" 0)
  90. (command "_explode" ss)
  91. (setvar "QAFLAGS" oldQAFLAGS)
  92. )
  93. )
  94. )

  95. (princ)
回复

使用道具 举报

发表于 2014-8-6 21:32 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2014-8-7 08:05 | 显示全部楼层
Andyhon 发表于 2014-8-6 21:32
Ref Link:
http://bbs.mjtd.com/thread-110997-1-1.html

里面没有我要的代码啊
回复

使用道具 举报

发表于 2014-8-7 08:45 | 显示全部楼层
...所有cad文件...运行某个Lisp程序...
框架相同,只改套个别 Lisp程序
回复

使用道具 举报

 楼主| 发表于 2014-8-8 08:17 | 显示全部楼层
gufeng 发表于 2014-8-7 09:23
;;_把代码保存LSP,加载到CAD的启动组,执行命令test
;;_2014年8月7日  获取指定目录下的DWG文件,批量执行操 ...

批处理文件201408.scr
上面说的文件在哪里?
回复

使用道具 举报

 楼主| 发表于 2014-8-8 08:32 | 显示全部楼层
gufeng 发表于 2014-8-7 09:23
;;_把代码保存LSP,加载到CAD的启动组,执行命令test
;;_2014年8月7日  获取指定目录下的DWG文件,批量执行操 ...

命令: (LOAD "E:/E盘DXM文件夹/有用别删除/逐一打开某文件夹中的DWG文件并修改保存的LISP代码.lsp") ; 错误: 输入中的点位置不正确
回复

使用道具 举报

 楼主| 发表于 2014-8-8 08:38 | 显示全部楼层
很奇怪,拖入CAD命令窗口加载就不正确,在CAD的LISP编辑窗口加载就正确。这是为什么?
回复

使用道具 举报

发表于 2014-8-8 09:46 | 显示全部楼层
清风明月名字 发表于 2014-8-8 08:32
命令: (LOAD "E:/E盘DXM文件夹/有用别删除/逐一打开某文件夹中的DWG文件并修改保存的LISP代码.lsp") ; 错 ...

我这测试拖入CAD窗口没问题,是否你本身的CAD已经存在此问题?可以找另外个LSP试下,
回复

使用道具 举报

 楼主| 发表于 2014-8-8 18:42 | 显示全部楼层
谢谢了!用VBA来完成这种任务更准确高效。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-24 04:40 , Processed in 0.330055 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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