编辑批处理LISP
我有一个由Tony Tanzillo编写的程序,它的工作方式完全符合我希望我的批处理程序的工作方式,只是我想在保存和关闭它之前,在它打开的每个图形上运行一个文本替换程序。我一直在尝试一些事情,但我似乎不知道需要添加什么才能实现这一点。
我想我没有足够的经验来知道使用哪个命令。我知道我需要在“;”中添加这个命令行,这将是您的批处理函数:“区域,但我不知道要使用什么命令,以便它在打开时运行我的程序。
我试图调用的程序是REPSTRING,这是我用来替换文本的另一个LISP。 我不知道这是否可行,但如果程序暂停足够长的时间以运行命令,然后在命令运行后恢复,该怎么办?
当从LISP中调用函数时,这不是必需的。。。但我真的没有足够的代码来处理这里。。。
这取决于文本替换是否接受参数,是否从命令行调用等等。。。
这个怎么样:
(defun C:OPB (/ *good-files* acapp adoc file_obj full-names-list osd)
(alert
"\nPlease wait a minute
\nto ending of batch file operation"
)
(vl-load-com)
(setq acapp (vlax-get-acad-object)
adoc(vla-get-activedocument acapp)
)
(vla-startundomark adoc)
(setq osd (vla-getvariable adoc "SDI"))
(vla-setvariable adoc "SDI" 0)
(setq olsp (vla-getvariable adoc "LISPINIT"))
(vla-setvariable adoc "LISPINIT" 0)
(if (setq full-names-list
(list-dwg (browse-folder "SELECT FOLDER" "C:\\"))
)
; change on your start path folder
(progn
(mapcar
(function
(lambda (i)
(progn
(setq file_obj (vla-open (vla-get-documents acapp) i))
(setq *good-files* (cons file_obj *good-files*))
;;here will your batch function:
(vla-setvariable file_obj "mirrtext" 0)
; (vla-setvariable file_obj "insunits" 0)
; (vla-setvariable file_obj "annotativedwg" 0)
(vla-close file_obj :vlax-true)
(vlax-release-object file_obj)
(setq file_obj nil)
)
)
)
full-names-list
)
(cond ((zerop (length *good-files*))
(princ "\nThere isn't opened files\n")
)
((not (eq (length full-names-list) (length *good-files*)))
(princ "\nSome files is not opened\n")
)
(T nil)
)
)
(princ "\nThere isn't .DWG files in selected directory\n")
)
(vla-setvariable adoc "SDI" osd)
(vla-setvariable adoc "LISPINIT" olsp)
(vla-endundomark adoc)
(princ)
)
我尽量避免违反托尼的任何规定。。。 所以,是的,它确实告诉你在图形上把函数放在哪里,所以它取决于你想要调用的函数的格式——它接受参数吗? 对我试图运行的命令由REPSTRING调用,有两个参数,要替换的文本和要替换的文本。
我相信这样的话:
重复字符串
文本1
文本2 我试着插入线路:
(命令“REPSTRING”“TEXT1”“TEXT2”)
但这会不断产生未知的命令,但我可以在命令行中键入REPSTRING,每次都可以正常工作。 不,不,我的意思是在命令行调用的函数,或者它是一个子函数,接受参数。
但是,从您的响应中,我可以看到它是从命令行调用的。
您可以使用
(c:repstring)
但是,我倾向于将代码更改为sub,并接受参数,因为这样会更健壮。 好的,那么如果我将REPSTRING LISP添加到此批处理LISP中会怎么样呢
然后,在BATCH LISP中调用add BATCH function的部分中,我放置以下内容:
这行吗?
我想我需要补充一下:
(SETQ OSTRING (GETSTRING T "\nSTRING TO BE REPLACED: "))
(SETQ NSTRING (GETSTRING T "\nSTRING TO REPLACE WITH: "))
OPB计划即将开始。 不,你只需要打电话
(repstring "OldString" "NewString")
在批次代码中。
页:
[1]
2