Drwo 发表于 2022-7-6 11:08:53

工作区备份脚本

我正在尝试备份autoCAD工作区,以便安全地更改某些ACAD设置。
 
在这样做的时候,我遇到了一个小问题。如果存在具有该名称的现有工作区,那么我需要设置一个肯定答案来覆盖它,如果没有任何这样的工作区,则什么也不做。
 
错误的选择会阻止脚本进一步执行。
 
 
我通过VVA发布的代码找到了解决方案
(defun C:SW ()
;;;Save WorkSpace
(command "_.WorkSpace" "_Save"
"MyWorkSpace" ;;;_ Type this your workspace name
)
(while (> (getvar "CMDACTIVE") 0)(command "_Y"))
(princ)
)
 
我试着把它转换成脚本的一部分,但它总是挂在最后。我似乎无法找到在不结束脚本执行的情况下结束代码的方法。
 
我也试着把它分开。lsp文件并从脚本中加载它
(load "G:\\...\\install.lsp")
sw
(vl-load-com)
(vla-put-enterprisemenufile (vla-get-files
(vla-get-preferences(vlax-get-acad-object)))"G:/.../Standard_001.cui")
(command "*_TOOLPALETTEPATH" "G:/.../PALETTE SYSTEM")
(command "workspace" "c" "tmp")
(command "-toolbar" "STANDARD BLOCKS" "SHOW")
(command "quit" "y")

 
但是脚本总是纠缠在lisp代码中。。。
 
 
如果我试着直接在命令行中执行它,它会很好地工作。。。
 
所以这个解决方案对我来说很难理解

alanjt 发表于 2022-7-6 11:19:29

对我来说效果很好。
 
如。
(defun c:Test (/)
(command "_.workspace" "_sa" "ALAN")
(while (> (getvar "cmdactive") 0) (command "_Y"))
(command "_.line")
(princ)
)

Drwo 发表于 2022-7-6 11:30:36

 
这部分代码对我来说也很好。我在将其与脚本文件结合时遇到问题。
 
如果工作区文件已经存在,则会发生这种情况
 
Command: (load
"G:\\Isme\\STS\\DRAFTING\\AUTOCAD_TOOLS\\Library\\Blocks_2010\\Installation\\ins
tall.lsp")
C:TEST
Command: test
_.workspace Enter workspace option
<setCurrent>: _sa
Save Workspace as <TMP>: tmp
"tmp" already exists.
Do you wish to replace it? ? <N> _Y
Command: _Y Unknown command "Y".Press F1 for help.
Command: _.line Specify first point: Specify first point: *Cancel*
 
 
如果工作区不存在,就会发生这种情况
 
Command: ((load
"G:\\Isme\\STS\\DRAFTING\\AUTOCAD_TOOLS\\Library\\Blocks_2010\\Installation\\ins
tall.lsp")
(_> test
(_> (vl-load-com)
(_> (vla-put-enterprisemenufile (vla-get-files
(vla-get-preferences(vlax-get-acad-object)))"G:/Isme/STS/DRAFTING/AUTOCAD_TOOLS/
Library/Blocks_2010/Installation/Standard_001.cui")
(_> (command "*_TOOLPALETTEPATH"
"G:/Isme/STS/DRAFTING/AUTOCAD_TOOLS/Library/Blocks_2010/PALETTE SYSTEM")
(_> (command "workspace" "c" "tmp")
(_> (command "-toolbar" "STANDARD BLOCKS" "SHOW")
(_> (command "quit" "y")
(_> *Cancel*
; error: Function cancelled
 
在这两种情况下,我都必须手动取消命令。如果我在代码末尾加上一个enter或空格,那也没用。

alanjt 发表于 2022-7-6 11:37:25

这样试试。。。
 
(defun c:Test (/)
(command "_.workspace" "_sa" "ALAN")
(while (eq (logand 1 (getvar 'cmdactive)) 1) (command "_Y"))
(command "_.line")
(princ)
)

alanjt 发表于 2022-7-6 11:46:22

运气好吗?

Drwo 发表于 2022-7-6 11:51:26

对不起,我的工作时间刚刚结束后的职位。。。
 
我明天早上去查一下,然后告诉你

alanjt 发表于 2022-7-6 11:55:56

别担心。祝你好运

Drwo 发表于 2022-7-6 12:07:20

我删除了用于绘制线条的代码行,现在可以使用了。。
 
谢谢

alanjt 发表于 2022-7-6 12:14:51

是的,那只是为了演示。很高兴它起作用了。
页: [1]
查看完整版本: 工作区备份脚本