Dustin11 发表于 2022-7-5 20:08:50

Lisp例程挂起

我正在编写一个例程,该例程应该逐个打开文件夹中的每个图形,删除外部参照路径,将其保存到R14,然后移动到下一个图形。似乎它在打开第一幅画后就挂断了,之后就没能工作了。这是我多年来第一次用Lisp编写东西,也是我第一次尝试编写一个包含循环的例程,所以我不太确定这是否是它不能正常工作的部分原因。代码如下:
 

(defun c:savedown (/)
(vl-load-com)
(setq location (getvar "dwgprefix"))
(setq drawingfiles (cddr (vl-directory-files location)))
(setq dwgnmbr (length drawingfiles))
(repeat dwgnmbr
   (setq location (getvar "dwgprefix"))
   (setq drawingfiles (cddr (vl-directory-files location)))
   (setq drawingname (car drawingfiles))
   (setq drawingfiles (cdr drawingfiles))
   (setq filename (strcat location drawingname))
   (command "fileopen" "Y" filename)
   (command "._xref" "T" "*" "N" "")
   (command "._saveas" "LT98" "" "Y")
   );repeat
)

Dustin11 发表于 2022-7-5 20:39:47

我忘记提及的另一个问题是,在打开图形且代码失败后,我无法通过外部参照管理器单击任何外部参照。只有在将SDI系统变量更改为1,然后再次返回到0后,我才能使它们再次可选。它似乎把它从部分冻结中踢了出来,它被卡住了。

Jef! 发表于 2022-7-5 21:01:49

据我所知,lisp绑定到单个图形,这意味着您无法使用lisp打开图形并在新打开的图形上继续运行。
 
我采用的一种方法是使用。bat,调用autocad并运行脚本。(您需要通过脚本执行操作)
 
缺点是脚本比lisp慢,批处理文件必须为每个文件启动autocad一次。。。
 
这是我使用的批处理(.bat)文件的内容
FOR %%f in (D:\Users\myuser\Desktop\tryon\*.dwg) do start /wait D:\"Program Files"\"Autodesk"\"AutoCAD 2014"\acad.exe "%%f" /b D:\Users\myuser\Desktop\try\try.scr
文件夹“tryon”是我复制图纸的文件夹。。
我希望这有帮助。
干杯
 
编辑:必须在脚本中使用quit命令才能使批处理文件转到下一个批处理文件
 
scr文件的示例
zoom
extents
qsave
quit
。。别忘了退出后马车会回来。

BIGAL 发表于 2022-7-5 21:25:56

我支持geoff让siad使用的脚本,您可以使用lisp的第一部分使脚本将所有DWGNAME和所需的命令写入文件,我将按每个dwg执行2-3行,注意隐藏空间,因为
 
我使用CMD和Dir*。dwg/b>dirlst to make dwg列出了使用word制作脚本,如果您知道它有多快的话。

open z:\\myprojects\\dwg1
._xref T * N

._saveas LT98Y close
open z:\\myprojects\\dwg2
._xref T * N

._saveas LT98Y close
页: [1]
查看完整版本: Lisp例程挂起