查看单个帖子
mouze
 
mouze 的头像
热心会员
 
资 料:
注册日期: Apr 2002
帖子: 8,223 声望值: 13
精华: 5,解答: 65
#4 旧 2011-02-10, 15:42:03 默认
mouze 当前离线  

引用:
作者: sungwehan 查看帖子
@rem 此BAT文件名一定不能是"tree.bat",否则tree命令会实效,不知道为什么
@rem 可能是因为系统目录有"tree.com",系统会混淆吧.
@rem 用"dir.bat"作文件名却可以.
在命令行窗口内 运行命令,如果不键入扩展名,是有如下的执行次序的:

首先是内部命令(如:dir、copy等),然后依次是 .com、 .exe、 .bat、 .cmd 等外部命令。

当你执行命令“tree”时,系统会先查找有没有“tree”这个内部命令,没有的话,就在当前目录内依次查找tree.com、 tree.exe、 tree.bat、 tree.cmd 这些外部命令;

如果仍然没有,则按 %path% 变量里定义的路径去依次查找。。。

用来列目录树的“tree”命令实际上是外部命令“tree.com”,并且默认放在c:\windows\system32\目录内(此目录包含在默认的%path%内,并且排第一)。

所以,楼上批处理程序如果命名为“tree.bat”,其中的“tree /f > 1.TXT”这句会调用tree.bat本身,造成死循环;

解决方法有3个:

1、命名为其它名字,比如:tree1.bat
2、把“tree /f > 1.TXT”这句改写为“tree.com /f > 1.TXT”
3、把tree.com复制到当前目录内,与tree.bat放在一起,但是这时不能运行tree,而要运行tree.bat或在资源管理器内双击tree.bat

以上任意一个方法均可。

另外,如果命名为dir.bat,那就不能运行dir,而要运行dir.bat或在资源管理器内双击dir.bat,因为如果直接运行dir,那就会执行内部命令的dir,而不是运行dir.bat了。