highflybir 发表于 2007-8-23 18:41:00

【飞鸟集】在lisp中巧用DOS.

根据网上的帖子得出的一种方法,供参考。

下面是一个在lisp中巧用DOS的例子:

如何得到网上邻居的电脑名(defun c:net(/ f cmd lst name)
(setq cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)                           ;关闭命令回显
(command ".shell" "net view > c:\\1.txt|exit") ;用dos命令查看并输出到1.txt然后关闭dos
(command ".delay" "200")                     ;因为lisp执行速度快于dos,所以延时0.2秒
(setvar "cmdecho" cmd)
(setq f (open "c:\\1.txt" "r"))                ;打开dos下创建的文件
(read-line f)                                  ;前三行与网上邻居的名字无关
(read-line f)                                 
(read-line f)
(while (and (setq name (read-line f))         
       (= (substr name 1 1) "\\")
)
    (setq name (substr name 3))                  ;从第三个字符开始是其名字
    (setq name (vl-string-right-trim " " name));删除右边的多余空格字符
    (setq lst (cons name lst))                   ;构造到列表中去
)
(close f)                     
(reverse lst)                                  ;顺序要颠倒
)
思路如下:用DOS命令查看网上邻居,然后把查看后的结果输出到文件,最后通过读文件得到结果。
这个例子可以延伸。是一个不用doslib的办法。

NetBee 发表于 2007-8-23 18:59:00

<p>最好将文件放到临时目录下,并且文件名不能与其他文件冲突,文件属性不能为只读或隐藏等。这样才能保证写入文件不会出错。</p><p>总之要加容错处理啦。。。。</p>

革天明 发表于 2012-6-18 14:59:32

很好的程序,谢谢楼主分享,要是不显示那个黑色窗口就好了

自贡黄明儒 发表于 2013-8-13 12:02:10

这本来是好东西,关键是对dos不熟

恕放之生命 发表于 2014-8-21 11:46:05

学习一下,谢谢分享.

baitang36 发表于 2021-12-26 11:39:32

留个记号,备用
页: [1]
查看完整版本: 【飞鸟集】在lisp中巧用DOS.