根据网上的帖子得出的一种方法,供参考。
下面是一个在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的办法。
|