MarcoW 发表于 2022-7-6 11:17:37

在differe上重复命令

为了将一些lisp文件(以编程方式)添加到我的启动套件中,我尝试修改我在上面找到的代码:
 
http://thatcadguy.blogspot.com/2010/02/startuplsp-adding-to-autocads-startup.html
 
所有的功劳都归功于作者,我相信《杰克》。
 
然而,该代码只适合添加一个文件。
 
这是原始代码:
 

(defun addToStartupSuite(filename
   /
   regpath
   revision
   version
   default
   ct
   numstartup
   n)
(setq regpath"HKEY_CURRENT_USER\\Software\\Autodesk\\AutoCAD"
revision (vl-registry-read regpath "CurVer")
version(vl-registry-read
    (setq regpath (strcat regpath "\\" revision))
    "CurVer")
default(vl-registry-read
    (setq regpath (strcat regpath "\\" version "\\Profiles")))
regpath(strcat regpath "\\" default "\\Dialogs\\Appload\\Startup")
ct1
)
(if (setq numstartup (vl-registry-read regpath "NumStartup"))
   (progn
   (setq n (1+ (atoi numstartup)))
   (while (and
       (< ct n)
       (/= filename
    (vl-registry-read regpath (strcat (itoa ct) "Startup")))
       )
(setq ct (1+ ct))
)
   )
   (setq n 1)
   )
(if (= n ct)
   (progn
   (vl-registry-write
regpath
(strcat (itoa n) "Startup")
filename)
   (vl-registry-write regpath "NumStartup" (itoa n))
   )
   )
)



 
有一个选项可以这样做:
 

(defun c:test ( / )
(addToStartupSuite"LispFile1.lsp")
(addToStartupSuite"LispFile2.lsp")
(addToStartupSuite"LispFile3.lsp")
(addToStartupSuite"LispFile4.lsp")
(addToStartupSuite"LispFile5.lsp")
(princ)
)
(princ)

 
但我相信这可以做得更短/更有效。
 
太糟糕了,我找不到/记不起怎么做这种动作。
 
我的尝试是:
 
(defun c:测试(/)
(应用“addToStartupSuite”
'(
“lispfile1.lsp”
“lispfile2.lsp”
“lispfile3.lsp”
“lispfile4.lsp”
“lispfile5.lsp”
)
)
(普林斯)
)
(普林斯)
 
但这显然不起作用。
 
我读过“foreach”和“mapcar”,因为我认为这是一个解决方案。
 
但是没有,我再一次输掉了这场战斗。。。。
这方面有什么帮助/想法吗?
 
提前谢谢。
 
(注:这里是你的意思“不喜欢代码中的标签…”

alanjt 发表于 2022-7-6 11:24:34

两个选项。。。
 
(foreach f '("lispfile1.lsp" "lispfile2.lsp" "lispfile3.lsp" "lispfile4.lsp" "lispfile5.lsp")
(addToStartupSuite f)
)


(mapcar (function addToStartupSuite)
       '("lispfile1.lsp" "lispfile2.lsp" "lispfile3.lsp" "lispfile4.lsp" "lispfile5.lsp")
)
我会选择后者。

MarcoW 发表于 2022-7-6 11:29:18

谢谢Alanjt,谢谢你的回答!
有了这个(以及最近的所有其他答案),我现在手头有很多事情要做:-)
 
您的帮助舒尔帮助了我。
 
编辑:测试了代码,它的工作方式正是我喜欢的!!

alanjt 发表于 2022-7-6 11:35:21

很高兴听到。
 
祝你快乐。

MarcoW 发表于 2022-7-6 11:36:58

Alanjt,
 
我仍然需要你的帮助。。。
这让我感到困扰:例程可以工作,它将lisp的名称放在启动套件中,但没有路径,所以它不工作。。。hmpf。。
 
所以我想,添加路径:
 

(defun test ()
   (mapcar (function addtostartupsuite)
    '(
      (strcat(getenv "programfiles") "\\MarcoW\\" "testfile1.lsp")
      (strcat(getenv "programfiles") "\\MarcoW\\" "testfile2.lsp")
      (strcat(getenv "programfiles") "\\MarcoW\\" "testfile3.lsp")
      )
   )
   (princ)
)

 
但是我得到了这个错误:
 
 
这会在哪里出错?
非常感谢您的帮助!!

alanjt 发表于 2022-7-6 11:42:58

将“(更改为(列表
 
'(a;sdk)内容将不会被评估。

MarcoW 发表于 2022-7-6 11:47:49

反应前6分钟。。。。相当快!!
 
艾伦,这就成功了。。。然而,现在lisp例程在启动套件中是“visial”的,但它们没有加载。你能理解我的意思吗?
 
Lisp出现在启动套件中,包括路径,但如果我尝试使用我的函数,它将不起作用。手动加载有效。
 
当然,这是我所不知道的,所以如果你能进一步帮助我,我将非常高兴。

alanjt 发表于 2022-7-6 11:50:04

大家都知道创业套件有问题。你有没有试过用阿卡多克来装。lsp文件?

MarcoW 发表于 2022-7-6 11:57:56

是的,我读过创业套件“不是最好的选择”。我还读到了阿卡多克。lsp文件。
 
但我从未尝试过。
我以为这是AutoCAD附带的现有文件,我不想把它搞砸。因此,我保持原样。
我错了吗?
 
也许现在这是一个更好的解决方案,我应该试着这样做。。。我能说的就是我需要用谷歌搜索一下,因为我不知道你在说什么。
 
有一个示例/想法/提示/完整的lisp,包括所有的细节,就像我想要的那样,而不需要我进一步的实验?
(最后一个当然是个笑话:-)

alanjt 发表于 2022-7-6 12:03:18

阿卡多克。lsp不符合标准。但是,如果AutoCAD在支持路径中找到一个,它会将其加载到每个图形中。
页: [1] 2
查看完整版本: 在differe上重复命令