明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2895|回复: 19

[源码] [源码+教程]使用Windows批处理管理Autolisp源码

[复制链接]
发表于 2015-12-9 16:32 | 显示全部楼层 |阅读模式
本帖最后由 brbright 于 2015-12-11 09:00 编辑

感谢网友们的反馈,这里补充说明:
使用BAT的目的:
1.获得系统目录,精确匹配DCL路径,方便移动。
2.把所有的函数和小程序分割成小代码块,方便修改。使用BAT就是为了lsp的分割管理。
3.自动复制零散的源码到一个文件里,方便增加函数库、增加小程序。
4.分开的还是分开的,各目录里零散的lsp还是在哪里没动。原文用“合编”有歧义。用“复制”可能会好一点。
5.我是从type命令【合并txt】开始的。附录忘了补充type命令的内容,请百度“批处理+合并txt”,谢谢。

使用Windows批处理管理Autolisp源码
Contents
使用Windows批处理管理Autolisp源码... 1
第一步 创建.lsp文件... 2
第二步 获得批处理文件的当前目录(用于DCL)... 2
第三步 替换\符为/符... 3
第四步 在AutoLisp中生成系统目录字符串变量... 4
第五步 合编lisp文件夹中所有的代码到start.lsp. 5
结束语... 7

附录一 Windows命令行获取当前bat文件所在目录... 9
附录二  SET和变量... 11
附录三 批处理BAT替换字符串... 12
附录四 批处理FOR循环... 13

【附录请下载附件查看】

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1 赞一个!

查看全部评分

本帖被以下淘专辑推荐:

发表于 2015-12-10 09:05 | 显示全部楼层
本帖最后由 fl202 于 2018-3-22 14:43 编辑


我觉得还是分开比较好,便于查找、调试,变量之间也不冲突。
发表于 2020-2-15 11:13 | 显示全部楼层
好东西啊,非常有用
 楼主| 发表于 2015-12-9 16:35 | 显示全部楼层
本帖最后由 brbright 于 2015-12-9 16:37 编辑

第一步 创建.lsp文件
在空白txt文件中输入以下内容,并将后缀改为bat:

echo (vl-load-com) > start.lsp
pause

双击运行后,弹出命令行对话框

在同一个目录下看到start.lsp文件,里面只有一行代码:
(vl-load-com)

说明:
1.  echo是批处理语言的显示函数,后面跟着的是要显示的内容。
2.  > 大于号是文件操作符,表示你要创建文件,后面是文件名及后缀名。如果文件已存在,则覆盖。
3. pause是等待用户输入命令,若无则自动关闭命令行程序框。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2015-12-9 16:38 | 显示全部楼层
第二步 获得批处理文件的当前目录(用于DCL
在空白txt文件中输入以下内容,并将后缀改为bat:
@echo off
set dirstr=%~dp0
echo %dirstr%
pause
双击运行后,可以看到类似这样的提示:

说明:
1.@echooff 关闭echo回显。这句可有可无。主要是为了命令栏的运行窗口看起来更清晰。
2.setdirstr=%~dp0 取得批处理文件的当前目录并将之存储到dirstr变量中。详细请百度“批处理+系统目录”。
3.echo%dirstr%显示dirstr变量中存储的系统目录字符串。
4.pause同上。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2015-12-9 16:39 | 显示全部楼层
第三步 替换\符为/符
AutoLisp不支持Windows的\符,要替换为/符
在空白txt文件中输入以下内容,并将后缀改为bat:

@echo off
set dirstr=%~dp0
echo %dirstr%
set "dirstr=%dirstr:\=/%"
echo %dirstr%
pause

双击运行后,可以看到类似这样的提示:

我们可以看到,所有的\符都变为/符了。
说明:
1.@echo off 同上
2.set dirstr=%~dp0 同上
3.echo %dirstr% 同上
4.set "dirstr=%dirstr:\=/%" 替换dirstr变量中的\符为/符,详细请百度“批处理+字符串替换”。
5.echo %dirstr% 同上

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2015-12-9 16:40 | 显示全部楼层
第四步 在AutoLisp中生成系统目录字符串变量
在空白txt文件中输入以下内容,并将后缀改为bat:

@echo off
set dirstr=%~dp0
set "dirstr=%dirstr:\=/%"
echo (setq d_dir_str "%dirstr%") >> start.lsp
pause

双击运行后,会在同一个目录下看到start.lsp文件,里面多了一行代码:
(setq d_dir_str "D:/使用Windows批处理管理Autolisp源码/教程版/")

看到这里,知道DCL文件调用方法的朋友们应该或许会激动了,这不是我们一直想要的“当前目录”吗!

说明:
1.echo (setq d_dir_str "%dirstr%") >> start.lsp 这句代码中,%dirstr%是读取dirstr变量中的字符串并在原位返回。
2.>>两个大于号表示要将echo后面的内容追加到文件start.lsp中。
3.其他的同上。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2015-12-9 16:41 | 显示全部楼层
第五步 合编lisp文件夹中所有的代码到start.lsp
在本教程附带源码的lisp目录中,有五个类似这样的lsp程序:
(defun c:q1 ()
  (setq dcl_str (strcat d_dir_str "dcl/d_1.dcl"))
  (setq dcl_id (load_dialog dcl_str))
  (new_dialog "dia_1" dcl_id)
  (start_dialog)
)
程序很简单,就是打开dcl目录中的dcl_1.dcl文件,其他四个分别打开dcl_2.dcl到dcl_5.dcl共四个文件。
其中,d_dir_str变量存储了当前的Windows系统目录,是我们前四步的努力成果。
在空白txt文件中输入以下内容,并将后缀改为bat:
echo= >> start.lsp
echo= >> start.lsp
for %%i in (lisp\*.lsp) do (type "%%i"&echo=&echo=) >> start.lsp
pause
双击运行后,会在同一个目录下看到start.lsp文件,里面多了很多代码:

说明:
1. echo= >> start.lsp 在echo后面直接写等号,能达到输出空行的目的。
1. for %%i in () do () 这是批处理语言的循环用法。
2. 第一个括号中的lisp\*.lsp指明在前文件夹中lisp目录下的所有后缀为.lsp的文件,前面的%%i就指代了每次操作所对应的文件。
3. 后面一个括号中的type "%%i"&echo= &echo= 是一个复合命令,表示输出循环中的每一个文件中的内容。&符号后接echo=指明要跟着输出一个空行。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2015-12-9 16:42 | 显示全部楼层
结束语
到这里,我们这篇教程就可以结束了。我知道读者可能觉得有些仓促。但仔细查看生成的start.lsp中的代码,我们有:
1.(vl-load-com)加载Visual Lisp拓展。
2. d_dir_str储存了当前的系统目录,再用strcat函数可以指定精确的dcl文件位置。
3.五个任意的零散的lsp文件全部合并到同一个名叫start.lsp的文件中。根据需要我们还可以在目录中放置更多的lsp文件,一样自动合并。而且,我们还可以合并其他目录中的lsp文件。
只要复制一行for %%i in (lisp\*.lsp) do (type "%%i"&echo=&echo=) >> start.lsp并将lisp改为相应的文件名字即可。
这样,无论我们有多少零散的lsp源码程序或者庞大的函数库,所有的东西都自动和并到一个lsp中。使用时只要加载这个lsp即可。
然后,作者认为,lsp源码管理所需要的东西,基本上都满足了。
最后,两个冒号可以用来注释代码,附上整理后的BAT批处理文件:

::关闭回显
@echo off
::创建start.lsp文件并输入一行(vl-load-com)
echo (vl-load-com) > start.lsp
::获得当前文件的系统目录
set dirstr=%~dp0
::替换\符转/符
set "dirstr=%dirstr:\=/%"

::在start.lsp文件中添加一句变量定义,存储当前文件的系统目录
echo (setq d_dir_str "%dirstr%") >> start.lsp
::输入两个空行
echo= >> start.lsp
echo= >> start.lsp
::合编lisp目录中的所有.lsp文件到start.lsp中
for %%i in (lisp\*.lsp) do (type "%%i"&echo=&echo=) >> start.lsp
pause

全文完。

评分

参与人数 3明经币 +3 收起 理由
llsheng_73 + 1 同理,也可以将dcl文件整合为一个DCL
USER2128 + 1 很给力!
lucas_3333 + 1 辛苦啦!

查看全部评分

发表于 2015-12-9 18:11 | 显示全部楼层
这个好!支持!
发表于 2015-12-9 18:17 | 显示全部楼层
虽然一下不理解
但很支持你这么热心的讲解
发表于 2015-12-10 08:35 | 显示全部楼层
为什么要这么合并呢?有点繁琐,还是不太理解,请楼主能把这样做的目的详细讲讲。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-28 18:12 , Processed in 0.713843 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表