曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3772|回复: 0
打印 上一主题 下一主题

[经验] 批处理文件名与命令名重名时发生的错误

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2012-12-13 21:40:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
当一个批处理文件名和系统内部命令(系统环境变量路径里的命令)重名时,会遇到死循环的错误(命令行窗口中不断的执行 ping 这个命令)。这个错误比较隐蔽,也有点匪夷所思。

比如在批处理写 ping 192.168.1.1 就这么一句话,但是如果你把这个批处理文件保存为 ping.bat 时,那么这个死循环错误就会发生;当然,对于别的内部命令 netstat 也是一样的。

如果你的 ping.bat 这个脚本使用的是 start ping 192.168.1.1 ,那你就面临着窗口炸弹的袭击,这时候得毫不犹豫按下 Ctrl + Alt + Del 组合键,注销系统才是王道。

为什么会出现的情况呢?

实际上,你无需在脚本里使用系统命令,而是随便填写一个字符串,并且以这个字符串作为脚本的文件名。当你运行该脚本时,你会看到一个黑乎乎的命令行窗口,什么都没有,但如果这时打开任务管理器,那么会看到 CPU 资源占用一下子飙升,在“进程”里会看到一个 cmd.exe 的进程的 CPU 占用率也是极高的。

由此可见,当执行脚本里的“字符串”命令时,脚本解析器首先会在当前目录下查找是否有相应的命令,如果有,则执行;如果没有,再去查找其它系统环境变量路径里是否存在该命令。这样一来,就解释了为什么保存与系统命令重名的批处理文件名时会发生死循环的现象。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-17 19:50 , Processed in 0.076133 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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