注册
登录
论坛
搜索
帮助
导航
私人消息 (0)
公共消息 (0)
论坛任务 (0)
系统消息 (0)
好友消息 (0)
帖子消息 (0)
批处理之家
»
BAT求助&讨论
» [讨论]批处理命令窗口闪一下就没了的原因
[新手上路]
批处理新手入门导读
[视频教程]
批处理基础视频教程
[视频教程]
VBS基础视频教程
[批处理精品]
批处理版照片整理器
[批处理精品]
纯批处理备份&还原驱动
[批处理精品]
CMD命令50条不能说的秘密
[在线下载]
第三方命令行工具
[在线帮助]
VBScript / JScript 在线参考
返回列表
发帖
Hello123World
发短消息
加为好友
Hello123World
当前离线
UID
30829
帖子
982
精华
0
积分
1525
PB
1281
技术
78
捐助
0
阅读权限
254
在线时间
428 小时
注册时间
2010-10-23
最后登录
2024-10-24
荣誉版主
帖子
982
积分
1525
技术
78
捐助
0
注册时间
2010-10-23
1
楼
跳转到
»
正序看帖
打印
字体大小:
t
T
发表于 2011-7-26 15:30
|
只看该作者
[其他]
[讨论]批处理命令窗口闪一下就没了的原因
我只能总结出两个原因,各位批友怎么看?
批处理命令窗口闪一下就没了的原因:
1.如果没在行末加 pause,批处理默认以cmd /c的形式运行(运行完代码后不保存窗口——和其对应的是cmd /k命令),所以就会一闪就没了。
2.语法出错也会造成窗口一闪消失。(强调:语法错误!——对应的逻辑错误会得到错误结果,但是不会出现一闪而过——这也是cmd.exe的特性,像vbs这种功能比较强大的脚本就会提示语法错误的具体事项,而不会一闪而过)
例如:
for /l %%i in(1 1 10) do @Echo %%i
pause
::我的本意是要其输出1-10这十个数并暂停,但其却一闪而过了,这是因为 in(),in和()之间要空格!
收藏
分享
如果用到sed命令,须下载sed.exe到c:\windows\system32文件夹中。
CrLf
发短消息
加为好友
CrLf
当前离线
UID
30406
帖子
6388
精华
2
积分
18843
PB
15777
技术
982
捐助
100
阅读权限
255
在线时间
5536 小时
注册时间
2010-10-9
最后登录
2024-5-10
论坛巡查
帖子
6388
积分
18843
技术
982
捐助
100
注册时间
2010-10-9
3
楼
发表于 2011-7-26 23:11
|
只看该作者
个人理解:cmd 碰到 for 和 if 这两个关键词的时候,会按特定的语法对其后的内容进行预处理并载入内存,当“其后的内容”中缺失或者出现多余关键词和参数的时候,cmd 会出错退出,另外,当其后的语句无法构成合法语块的时候也会致错退出,这是其他命令所不具备的特性。
链接:
在线第三方命令行工具下载
bat、vbs、js 原生混编
TOP
cjiabing
发短消息
加为好友
cjiabing
(甲兵时代)
当前离线
UID
7853
帖子
1726
精华
2
积分
4476
PB
4191
技术
95
捐助
0
阅读权限
254
在线时间
1303 小时
注册时间
2008-12-21
最后登录
2018-10-23
荣誉版主
帖子
1726
积分
4476
技术
95
捐助
0
注册时间
2008-12-21
2
楼
发表于 2011-7-26 22:01
|
只看该作者
好像有人讨论过。
一闪而过的原因是多样的:
1、没有使用pause、set /p、cmd /c、ping等具有暂停功能的命令,或者没有使用循环一类的命令,使得命令执行完毕之后自动退出。或者使用了含有中断、终止、退出等命令使得命令自动退出。
2、命令语法错误。常见的如刚才你提示的没有使用分隔符号分割命令(如空格),命令字母写错(如token=1),命令参数写错(如%a),等等,在for中这类错误比较敏感,发生错误直接退出。
3、命令对象错误也会导致命令发生错误退出。比如使用命令对一些文件进行操作,如果文件本身有错误,命令就无法正常执行。这种错误在start、if、for、findstr、del等中比较明显。
4、参数错误、变量错误等可预料和不可预料的错误。这个是十分经常地遇到的。我们以为按照代码执行后应该得到预想的结果,但执行后发现命令发生错误退出,使用echo和pause查找显示那些变量和参数,你就会发现一些蛛丝马迹了。这种错误在if命令中最常见,在for中往往难以发现。一般用echo来检查。另外,使用%0、call等命令参数下,在不同的情况下发生变化,而作者没有及时注意,导致发生错误而找不到原因。
5、执行环境干扰。有些杀毒软件或者病毒会禁止程序运行,甚至cmd执行也会被拦截。系统环境被破坏也同样影响到cmd的执行。比如有些系统没有findstr命令,则批处理出现该命令时就会发生错误。
6、程序完整性和执行条件改变导致程序无法执行。这些在别人写的程序中比较普遍,比如在D盘写的命令都能执行,但在桌面执行不了,或者在自己电脑可以执行,但换到其他电脑执行不了,或者在原来的程序中可以执行,但拷贝到自己程序中则无法执行。这就是程序的普遍适应性比较差,原因在于调试不够。桌面执行不了的原因是执行路径含有了空格,一般使用“%~dp0test.bat”的形式。在其他电脑执行不了的原因较多,基本的还是代码思路比较狭隘,可能性执行条件或排除故障的担忧不够多。在源代码中执行成功,复制到自己程序中失败一般会涉及到变量延迟、变量参数、路径等因素,而这些因素往往影响到批处理的稳定性。
7、符号错误、计算错误等局限性错误。至于符号造成的错误也是比较常见的,一个原因就是作者没有将符号错误的可能排除掉。而批处理在计算方面也是有极限的,如果不考虑这种情况发生错误也是正常的。所以,这些错误都需要进行排除和再加工。
综上,除了第一条常识原因和第五条外部原因,第二、第四、第七条是经常发生的、而且好多是因为我们的疏忽而造成的,第三、第五条是难以预料的发生的,第六条应该是可以预料的。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。
TOP
返回列表
批处理专区: BAT CMD DOS
BAT求助&讨论
BAT教程&资料
BAT原创&转载
BAT新大陆
BAT转载代码
新手练功
出题挑战
有偿求助
第三方命令行
开源原创工具
iBAT
Take Command
其他脚本区
PowerShell求助&讨论
PowerShell教程&资料
PowerShell原创&转载
VBS求助&讨论
JS / JScript / JavaScript
VBS教程&资料
VBS原创&转载
UNIX/Linux Shell
Python
Perl
网络资源区
电脑技术研讨
精品软件交流
论坛事务区
站务交流
意见反馈
论坛公告
版主申请
交换链接
建站杂谈
活动专区
论坛总版规
[收藏此主题]
[关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]