Baber62 发表于 2022-7-5 16:39:06

脚本文件

需要创建一个脚本文件来运行下面的lisp例程,需要打开*。文件夹中的dwg文件一次一个,然后运行lisp例程,保存文件,然后关闭文件,然后打开目录中的下一个文件。
非常感谢您的帮助。
 
; (purge-unreferenced-images)
(defun purge-unreferenced-images (/ ss1 ctr id symlst enamelst delent vl_delent ipath iname tmp)
(defun remlst (/ tmp1)
(setq
   tmp        (length (member (cdr (assoc 340 (entget delent))) enamelst))
)
(repeat (- (length symlst) tmp)
   (setq tmp1 (cons (car symlst) tmp1))
   (setq symlst (cdr symlst))
)
(setq tmp (list (car symlst)))
(setq symlst (append (reverse tmp1) (cdr symlst)))
)
(defun massoc (key alist / x nlist)
(foreach x alist
   (if        (eq key (car x))
   (setq nlist (cons (cdr x) nlist))
   )
)
(reverse nlist)
)

(vl-load-com)
(setq ss1 (ssget "x" '((0 . "IMAGE"))))
(setq ctr 0)
(setq id (dictsearch (namedobjdict) "acad_image_dict"))
(setq symlst (massoc 3 id))
(setq enamelst (massoc 350 id))
(if ss1
   (progn
   (while (< ctr (sslength ss1))
(setq delent (ssname ss1 ctr))
(setq vl_delent (vlax-ename->vla-object delent))
(setq ipath (vla-get-ImageFile vl_delent))
(remlst)

(setq iname (strcat (vl-filename-base ipath) (vl-filename-extension ipath)))

(if (and (not (findfile ipath))
       (not (findfile iname))
    )
(progn
    (dictremove (cdr (car id)) (car tmp))
    (append tmp symlst)
    (ssdel delent ss1)
    (vla-delete vl_delent)
)
(progn
    (setq ctr (1+ ctr))
)
)
   )
   )
)
(while symlst
   (dictremove (cdr (car id)) (car symlst))
   (setq symlst (cdr symlst))
)
)
(defun c:PUI()
(purge-unreferenced-images)
(princ)
)
(princ)

ziele_o2k 发表于 2022-7-5 17:12:13

http://www.lee-mac.com/scriptwriter.html

Lee Mac 发表于 2022-7-5 17:35:01

您可以使用我的脚本编写器程序执行此任务。
 
假设您的LISP文件名为“purge unreferenced images.lsp”,“脚本行”如下所示:
_.open *file* (load "purge-unreferenced-images.lsp" nil) (if purge-unreferenced-images (purge-unreferenced-images)) _.qsave _.close

Baber62 发表于 2022-7-5 17:57:51

谢谢大家。。。你们是救生员
页: [1]
查看完整版本: 脚本文件