acad1985 发表于 2022-7-5 15:28:32

Lisp自动运行命令

大家好
我在一个文件夹中有一堆文件,我必须对几个文件进行清除。
我有一个lisp文件可以自动打开文件,
因此,我的想法是,打开文件后,如果文件名有7位数字,则清除命令应自动运行,如果文件名小于/大于7位,则命令不应运行。如果可能的话,我们可以用lisp吗。?

Tharwat 发表于 2022-7-5 15:34:58

你好
 
创建阿卡多克。lsp文件(如果它尚未存在于AutoCAD支持文件夹中),然后将代码添加到上述文件中,然后在代码中需要一些代码来检查文件名,如果符合条件,则执行此操作。

acad1985 发表于 2022-7-5 15:35:11

嗨Tharwat
感谢您的回复,如果我将代码添加到acaddoc中。lsp,这将在每次打开我的AutoCAD时运行所有文件,但如果文件名有七位数字(例如1234_A3),则只需要自动运行purge命令。

BIGAL 发表于 2022-7-5 15:38:26

一个简单的检查(getvar“dwgname”)并查看它是否有一些模式
 

(getvar 'dwgname)
strlen is it 11
subtract .dwg of end dont forget the 4 end characters .dwg
substr in a loop 7 times check each character is it a number
asscii 47-59 is 0-9
Drawing1.dwg is 12 long so Drawing1 is 8 long

acad1985 发表于 2022-7-5 15:42:41

嘿Bigal
你能告诉我密码吗。。我不是Lisp程序的专家。但我有兴趣学习。所以请帮帮我。

rlx 发表于 2022-7-5 15:44:46

这将有助于您的道路:
 

(defun c:tst ( / dwgn letters numbers)
(vl-load-com)
; dwgname without path and extension
(setq dwgn (vl-filename-base (getvar 'dwgname)))
(princ (strcat "\nDrawing name is : " dwgn))
(princ (strcat "\nDrawing name has " (itoa (strlen dwgn)) " characters"))
; Total number of letters in filename
(if (> (setq letters (length (vl-remove-if '(lambda(x)(and (< x 58)(> x 47)))(vl-string->list dwgn)))) 0)
   (princ (strcat "\nTotal of letters in drawing name : " (itoa letters)))
   (princ "\nNo letters in dwgname")
)
; total number of numbers in filename
(if (> (setq numbers (length (vl-remove-if '(lambda(x)(or (< x 48)(> x 57)))(vl-string->list dwgn)))) 0)
   (princ (strcat "\nTotal of numbers in drawing name : " (itoa numbers)))
   (princ "\nNo numbers in dwgname")
)
(princ)
)

; a few tiny lisp functions for more general use :

; remove letters from string (ripcar "123abc456def") -> "123456"
(defun ripcar (s)
(vl-list->string (vl-remove-if '(lambda(x)(or (< x 48)(> x 57)))(vl-string->list s))))
; remove numbers from string (ripnum "123abc456def") -> "abcdef"
(defun ripnum (s)
(vl-list->string (vl-remove-if '(lambda(x)(and (< x 58)(> x 47)))(vl-string->list s))))

Rlx级

BIGAL 发表于 2022-7-5 15:49:47

感谢rlx,很好的描述,这个问题可能会导致其他问题,例如清除您无意中删除的dwg。因此,acad1985确保您在开始时有一个continue yes或no,对于您的信息,dcl只支持Ok Cancel按钮,进行漂亮的屏幕输入,而不是键入Y N等。这促使我添加到我的库中。

Tharwat 发表于 2022-7-5 15:52:05

A是字母而不是数字。
你能解释一下你的不同文件名吗,以便知道当满足某个条件时如何检查和运行程序。

Tharwat 发表于 2022-7-5 15:54:44

你好,rlx,
(length nil) ;; = 0

rlx 发表于 2022-7-5 16:00:06

 
哦,该死,我刚发完帖子就意识到了这一点,但我希望没人会注意到,但没人能愚弄你。。。哈哈
页: [1] 2
查看完整版本: Lisp自动运行命令