【飞鸟集】在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的办法。
<p>最好将文件放到临时目录下,并且文件名不能与其他文件冲突,文件属性不能为只读或隐藏等。这样才能保证写入文件不会出错。</p><p>总之要加容错处理啦。。。。</p> 很好的程序,谢谢楼主分享,要是不显示那个黑色窗口就好了 这本来是好东西,关键是对dos不熟 学习一下,谢谢分享. 留个记号,备用
页:
[1]