明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 15360|回复: 30

[【不死猫】] 【原创】Lisp调用DOS进行批处理V2.2更新(主体优化)

  [复制链接]
发表于 2008-10-21 18:09 | 显示全部楼层 |阅读模式
本帖最后由 nonsmall 于 2013-5-13 11:43 编辑

Lisp后台调用DOS批处理 终于可以实现:

=================================================

v2.2更新

主体完全改写rundos差不多可以用于应用了getdos还有点局限

rundos取消延时

getdos增加延时半秒(主要针对某些较慢的电脑)

V2.0 推出

增加DOS命令返回值处理功能!

修改函数为RunDOS  GetDOS

运行(RunDOS '(DOS语句 DOS语句))→返回值(GetDOS DOS命令)

v1.9

改变程序主体

完善程序的稳定性

增加进程清理

v1.8

修正错误处理

完善程序的运行效果

V1.6

修正当批处理语句多的时候运行不完整

修正运行有延时的BUG

修正检查输入错误判断

提高运行的效率

完善后台自动执行

=================================================

(GetDOS "cd")

"C:\\Documents and Settings\\ZHANGTN\\My Documents" "C:\\Documents and
Settings\\ZHANGTN\\My Documents"

----

(foreach txt (GetDOS "time") (print txt))

"当前时间: 15:59:47.02"
"输入新时间: " "输入新时间: "

-----

(GetDOS "ver")

"Microsoft Windows XP [版本 5.1.2600]"

-----

获取当前系统进程列表

(getdos "tasklist")

"图像名                       PID 会话名           会话#       内存使用 "
"========================= ====== ================ ======== ============"
"System Idle Process            0 Console                 0         28 K"
"System                         4 Console                 0        296 K"
"smss.exe                     592 Console                 0        404 K"
"csrss.exe                    640 Console                 0      8,232 K"
"winlogon.exe                 668 Console                 0      5,468 K"
"services.exe                 712 Console                 0      4,868 K"
"lsass.exe                    724 Console                 0      1,820 K"
"svchost.exe                  952 Console                 0      5,692 K"
"svchost.exe                 1032 Console                 0      5,076 K"
"svchost.exe                 1128 Console                 0     23,608 K"
"svchost.exe                 1244 Console                 0      3,896 K"
"svchost.exe                 1324 Console                 0      4,488 K"
"spoolsv.exe                 1456 Console                 0      5,596 K"
"ctfmon.exe                  2764 Console                 0      7,608 K"
"WINWORD.EXE                  276 Console                 0     11,440 K"
"Lisp.exe                    2656 Console                 0     13,920 K"
"hh.exe                       728 Console                 0      9,828 K"
"hh.exe                      2936 Console                 0      5,456 K"
"iexplore.exe                 320 Console                 0     46,264 K"
"hh.exe                      3920 Console                 0      1,948 K"
"explorer.exe                1780 Console                 0     14,712 K"
"acad.exe                    3616 Console                 0     57,852 K"
"AdskCleanup.0001             864 Console                 0      2,144 K"
"WSCommCntr1.exe             3652 Console                 0     11,780 K"
"acad.exe                    1836 Console                 0     63,736 K"
"AdskCleanup.0001            2444 Console                 0      2,148 K"

-------------------------------------------------
如果用Lisp批量改名dwg->dxf的话
是否还记得批处理那简单的ren?

ren d:\*.dwg *.dxf

批处理语句简单,容易上手 最重要的是现在网上的资料很多 比如:

DOS建立超级帐户

net user username password /add
net localgroup administrators username /add

关于DOS命令有太多的东西 后面附上DOS命令表

现在看看Lisp进行的简单调用

删除文件1.txt并且对dwg批量改名

(runDOS
 (list
  "del d:\\1.txt"
  "ren d:\\*.dwg *.dxf"
  "exit"
 )
)

建立超级帐户

(runDOS
 (list
  "net user username password /add "
  "net localgroup administrators username /add"
  "exit"
 )
)

现在终于可以进行简单的返回值了 只是对于值我还没有具体处理

但是研究通过第三方程序后台帮助Lisp处理外部问题 这是有用处的


 

本帖子中包含更多资源

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

x

评分

参与人数 1威望 +1 明经币 +2 金钱 +20 贡献 +5 激情 +5 收起 理由
mccad + 1 + 2 + 20 + 5 + 5 【精华】好程序

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-12-28 10:35 | 显示全部楼层
留名学习,感谢感谢!
 楼主| 发表于 2008-10-21 18:12 | 显示全部楼层
本帖最后由 作者 于 2008-10-23 16:05:17 编辑

程序见下面(这个仅仅是个尝试 对于路径名还是需要用lisp的\\)


;ASSOC    显示或修改文件扩展名关联。
;AT       计划在计算机上运行的命令和程序。
;ATTRIB   显示或更改文件属性。
;BREAK    设置或清除扩展式 CTRL+C 检查。
;CACLS    显示或修改文件的访问控制列表(ACLs)。
;CALL     从另一个批处理程序调用这一个。
;CD       显示当前目录的名称或将其更改。
;CHCP     显示或设置活动代码页数。
;CHDIR    显示当前目录的名称或将其更改。
;CHKDSK   检查磁盘并显示状态报告。
;CHKNTFS  显示或修改启动时间磁盘检查。
;CLS      清除屏幕。
;CMD      打开另一个 Windows 命令解释程序窗口。
;COLOR    设置默认控制台前景和背景颜色。
;COMP     比较两个或两套文件的内容。
;COMPACT  显示或更改 NTFS 分区上文件的压缩。
;CONVERT  将 FAT 卷转换成 NTFS。您不能转换
;         当前驱动器。
;COPY     将至少一个文件复制到另一个位置。
;DATE     显示或设置日期。
;DEL      删除至少一个文件。
;DIR      显示一个目录中的文件和子目录。
;DISKCOMP 比较两个软盘的内容。
;DISKCOPY 将一个软盘的内容复制到另一个软盘。
;DOSKEY   编辑命令行、调用 Windows 命令并创建宏。
;ECHO     显示消息,或将命令回显打开或关上。
;ENDLOCAL 结束批文件中环境更改的本地化。
;ERASE    删除至少一个文件。
;EXIT     退出 CMD.EXE 程序(命令解释程序)。
;FC       比较两个或两套文件,并显示
;         不同处。
;FIND     在文件中搜索文字字符串。
;FINDSTR  在文件中搜索字符串。
;FOR      为一套文件中的每个文件运行一个指定的命令。
;FORMAT   格式化磁盘,以便跟 Windows 使用。
;FTYPE    显示或修改用于文件扩展名关联的文件类型。
;GOTO     将 Windows 命令解释程序指向批处理程序
;         中某个标明的行。
;GRAFTABL 启用 Windows 来以图像模式显示
;         扩展字符集。
;HELP     提供 Windows 命令的帮助信息。
;IF       执行批处理程序中的条件性处理。
;LABEL    创建、更改或删除磁盘的卷标。
;MD       创建目录。
;MKDIR    创建目录。
;MODE     配置系统设备。
;MORE     一次显示一个结果屏幕。
;MOVE     将文件从一个目录移到另一个目录。
ATH     显示或设置可执行文件的搜索路径。
AUSE    暂停批文件的处理并显示消息。
OPD     还原 PUSHD 保存的当前目录的上一个值。
RINT    打印文本文件。
ROMPT   更改 Windows 命令提示符。
USHD    保存当前目录,然后对其进行更改。
;RD       删除目录。
;RECOVER  从有问题的磁盘恢复可读信息。
;REM      记录批文件或 CONFIG.SYS 中的注释。
;REN      重命名文件。
;RENAME   重命名文件。
;REPLACE  替换文件。
;RMDIR    删除目录。
;SET      显示、设置或删除 Windows 环境变量。
;SETLOCAL 开始批文件中环境更改的本地化。
;SHIFT    更换批文件中可替换参数的位置。
;SORT     对输入进行分类。
;START    启动另一个窗口来运行指定的程序或命令。
;SUBST    将路径跟一个驱动器号关联。
;TIME     显示或设置系统时间。
;TITLE    设置 CMD.EXE 会话的窗口标题。
;TREE     以图形模式显示驱动器或路径的目录结构。
;TYPE     显示文本文件的内容。
;VER      显示 Windows 版本。
;VERIFY   告诉 Windows 是否验证文件是否已正确
;         写入磁盘。
;VOL      显示磁盘卷标和序列号。
;XCOPY    复制文件和目录树。

DOS命令一览


本帖子中包含更多资源

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

x
 楼主| 发表于 2008-10-21 21:34 | 显示全部楼层
本帖最后由 作者 于 2008-10-23 16:13:08 编辑

这是网上流传已久的垃圾清理程序

(rundos
 (list
  "@echo off"

  "echo 正在为您清除系统垃圾文件和临时文件,请稍等......"

  "del /f /s /q %systemdrive%\\*._mp"

  "del /f /s /q %systemdrive%\\*.tmp"

  "del /f /s /q %systemdrive%\\*.gid"

  "del /f /s /q %systemdrive%\\*.log"

  "del /f /s /q %systemdrive%\\*.chk"

  "del /f /s /q %systemdrive%\\*.gid"

  "del /f /s /q %systemdrive%\\*.chk"

  "del /f /s /q %systemdrive%\\*.old"

  "del /f /s /q %systemdrive%\\recycled\\*.*"

  "del /f /s /q %windir%\\prefetch\\*.*"

  "del /f /s /q %windir%\\*.bak"

  "rd /s /q %windir%\\temp & md %windir%\\temp"

  "del /f /s /q %windir%\\prefetch\\*.*"

  "rd /s /q %windir%\\temp & md %windir%\\temp"

  "del /f /s /q \"%userprofile%\\Local Settings\\Temporary Internet Files\\*.*\""

  "del /f /q %userprofile%\\cookies\\*.*"

  "del /f /q %userprofile%\\recent\\*.*"

  "del /f /s /q \"%userprofile%\\Local Settings\\Temporary Internet Files\\*.*\""

  "del /f /s /q \"%userprofile%\\Local Settings\\Temp\\*.*\""

  "del /f /s /q \"%userprofile%\\recent\\*.*\" "

  "echo 清除系统垃圾完成!"
 )
)


发表于 2008-10-22 08:48 | 显示全部楼层

插朵花占个楼看精华,吸取营养,还好来得及时,不然会座门口排队了

 楼主| 发表于 2008-10-22 11:09 | 显示全部楼层
本帖最后由 作者 于 2008-10-24 16:04:54 编辑

有人问过不保存图直接关闭AUTOCAD怎么办呢

(rundos
 '("taskkill /im acad.exe /f")
)

这个语句可以非常快速的关闭所有的AUTOCAD

-----------------------------------------------

下班回家的代码

(rundos
 '("shutdown -s -f -t 10")
)

如果配合几个taskkill下班的时候可以帮你加速关机 o(∩_∩)o...

此命令慎用!测试结果强制关机状态不可取消!后面的10是关机前提示时间.

-----------------------------------------------

批量给DWG加只读属性

(rundos
 '("attrib D:\*.dwg +r")
)

-----------------------------------------------

查看当前IP

命令: (foreach txt (GetDOS "ipconfig") (print txt))

""
""
"Windows IP Configuration"
""
""
""
""
""
"Ethernet adapter 本地连接:"
""
""
""
"        Connection-specific DNS Suffix  . : "
""
"        IP Address. . . . . . . . . . . . : 156.21.29.90"
""
"        Subnet Mask . . . . . . . . . . . : 255.255.255.0"
""
"        Default Gateway . . . . . . . . . : 156.21.29.1"

------------------------------------

显示Windows 环境变量。

命令: (foreach txt (GetDOS "set") (print txt))

"ALLUSERSPROFILE=C:\\Documents and Settings\\All Users"
"APPDATA=C:\\Documents and Settings\\nonsmall\\Application Data"
"CommonProgramFiles=C:\\Program Files\\Common Files"
"COMPUTERNAME="
"ComSpec=C:\\WINDOWS\\system32\\cmd.exe"
"FP_NO_HOST_CHECK=NO"
"HOMEDRIVE=C:"
"HOMEPATH=\\Documents and Settings\\nonsmall"
"LOGONSERVER=\\\\"
"NewEnvironment1=C:\\Program Files\\ATI Technologies\\ATI.ACE\\"
"NUMBER_OF_PROCESSORS=2"
"OS=Windows_NT"
"Path=c:\\windows\\system32;c:\\windows;c:\\windows\\system32\\wbem;c:\\program
files\\common files\\autodesk shared\\;d:\\secondary_development;c:\\program
files\\autocad 2006\\support;c:\\program files\\autocad 2006\\fonts;c:\\program
files\\autocad 2006\\help;c:\\program files\\autocad 2006\\express;c:\\program
files\\autocad
2006\\support\\color;d:\\secondary_development\\二次开发空间\\bmp;d:\\secondary_
development\\millimetre\\;d:\\secondary_development\\lib;c:\\program
files\\autocad 2006;c:\\program files\\autocad 2006\\drv"
"PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH"
"PROCESSOR_ARCHITECTURE=x86"
"PROCESSOR_IDENTIFIER=x86 Family 15 Model 6 Stepping 5, GenuineIntel"
"PROCESSOR_LEVEL=15"
"PROCESSOR_REVISION=0605"
"ProgramFiles=C:\\Program Files"
"PROMPT=$P$G"
"SESSIONNAME=Console"
"SystemDrive=C:"
"SystemRoot=C:\\WINDOWS"
"TEMP=C:\\DOCUME~1\\nonsmall\\LOCALS~1\\Temp"
"TMP=C:\\DOCUME~1\\nonsmall\\LOCALS~1\\Temp"
"USERDNSDOMAIN= "
"USERDOMAIN=AS"
"USERNAME=nonsmall"
"USERPROFILE=C:\\Documents and Settings\\nonsmall"
"windir=C:\\WINDOWS" "windir=C:\\WINDOWS"

发表于 2008-10-22 12:57 | 显示全部楼层
排队学习,谢谢!
 楼主| 发表于 2008-10-23 13:55 | 显示全部楼层

目前遇到一点问题

请问Lisp怎么对进程的判断?

"winmgmts:\\.\root\cimv2:win32_process" 进程对象无法获得

发表于 2008-10-23 16:46 | 显示全部楼层

lisp,可以引用VB的动态链接库...

只是俺对VB不熟...不然VB可以做到的,lisp也可以做到

VB可以对进程的判断吧.那lisp应该是可以获得

发表于 2008-10-24 15:05 | 显示全部楼层
你完了,居然公布自己的ip
发表于 2008-10-28 08:47 | 显示全部楼层
IP可以变得阿。老兄。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-19 17:53 , Processed in 0.392455 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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