批处理一闪即逝的几种情况分析
一、批处理文件名中包含“&”、“^”
此问题在Win7、Win8、Win10中都会出现,具体表现为使用右键以管理员身份运行时批处理一闪即逝,双击运行则正常。这个问题是本人在2010年12月发现的,应该是Windows的一个BUG,当时还发了几条微博。
假设文件名为“A&B.bat”,系统会认为“&”前后是两条语句,所以会执行“A”和“B.bat”。
假设文件名为“A^B.bat”,系统会忽略“^”,所以实际上运行的是“AB.bat”。
但是一般情况下当前文件夹中并没有“A”、“B.bat”、“AB.bat”这几个文件,于是就自动退出了。这里说明一下,运行“A”时,系统不会运行无扩展名的“A”,而是会按照环境变量%PATHEXT%里面的值“.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC”按顺序进行查找“A.COM”、“A.EXE”……
为此我们可以进行验证,在某个文件夹中新建这6个文件A、A&B.bat、A.bat、A^B.bat、AB.bat、B.bat。
除A&B.bat和A^B.bat外,内容均为
@Echo %~nx0 @Pause
其中%~nx0表示当前批处理文件(0)的文件名(n)及扩展名(x)。A&B.bat和A^B.bat需要把%~nx0换成A^&B.bat和A^^B.bat,因为“&”和“^”都需要转义才能显示。
双击直接运行A&B.bat:
右键管理员身份运行A&B.bat:
你还可以将A.bat、B.bat删除其中一个或者都删除再看看运行结果,我就不截图了。A^B.bat的结果和A&B.bat类似,也不截图了。
二、环境变量%PATH%有问题
批处理中调用了系统目录下的程序,但是PATH有问题导致找不到文件。这个问题的起因,可能是你手工修改失误,也可能是安装了什么软件对PATH进行了修改,最常见的是MacType这个软件。
虽然FlyingSnow说MacType的这个BUG早已修复,但是本人Win7 x64亲测这个BUG在目前最新版2010.1231.0中依然存在,之前没有安装过任何旧版本MacType。
目前导致这个问题的具体原因还不太清楚,因为PATH看上去是正确的,一种可能有效的解决办法是在PATH最后加一个“;”再保存,如果不行可以再把最后的“;”删掉再保存。
三、批处理本身编写有误
拼写错误、忘记加pause这些低级错误我就不说了。说一个稍微高级一点儿的关于for的错误。
在批处理中for语句的变量都要写两个%,比如%%i,而在CMD中只需一个,这是一个比较容易出错的地方,如果在批处理中写成了%i,在运行到这条语句时就会提示错误然后自动退出。
下面介绍一种方法可以看到一闪即逝的错误,方便找到原因:
先Win+R打开运行窗口,输入CMD回车,打开CMD窗口,然后将批处理文件拖入CMD窗口,此时文件的路径会出现在屏幕上,然后按回车即可。
当然为了方便你也可以为bat文件添加一个右键菜单,具体步骤我就不讲了,Google有的是,命令行这样写
"C:\Windows\System32\cmd.exe" /k "%1"
四、CMD被禁用
这个问题一般不会导致一闪即逝,而是会提示“命令提示符已被系统管理员停用”。
既可以在组策略中修改也可以在注册表中修改
- 组策略中的位置:
Win+R打开运行窗口输入gpedit.msc回车打开组策略
左侧选择用户配置 – 管理模板 – 系统,然后右侧找到“阻止访问命令提示符”,选择未配置即可
- 注册表中的位置:
DisableCMD键值的位置在
HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System
DisableCMD为1表示禁用命令提示符和批处理文件,2表示只禁用命令提示符,改成0或者删除就可以解禁了
UPDATE: 如果修改后依然提示被禁用,可能是你中过病毒,修改了注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\0\Paths\{403cf677-e149-45df-bf2d-b320958e5ada}
里面内容为
- LastModified = AA 7A 59 05 D2 2C CC 01
- Description = “”
- SaferFlags = 0×00000000
- ItemData = “cmd.exe”
将这个项{403cf677-e149-45df-bf2d-b320958e5ada}整个删除即可
感谢群友无影的反馈
如果你还遇到其他情况,请告诉我
好文章!转载一下!
老大,你迅雷的安装时专用链怎么用的,快车链接不支持啊!
开始恢复文章了啊
嗯,一点点来
我发现了一个jayxon博客数据全部丢失之后的好处,就是我可以一篇一篇好好看看你的文章了……呵呵。开个玩笑!
老大,随云成立啦啊!
http://WWW.SUIYUN.ORG
jayxon,“友链”页面发表不了评论!
我之前跟你做了友链的,也知道您最近VPS完蛋了,呵呵。
麻烦再次添加上去。
我的网站名称:我你分享网
我的网站地址:iyshare.com
一句简介:我你分享网-专注软件分享与技术创新
加上了,发不了评论是一个插件的bug,暂时还没解决
老大qq又正式版了/
是不是要出一个呢。
顺便把上一版的那个bug给修复了
好文章 !~
大侠:能否更新一下QQ 5058
这个可以标记一下,不过不加pause不算错误吧~
。老大。您什么时候更新企鹅啊
用了几个网上的5058的。都不如您弄的好啊。
迅雷精简版做的不错,交换一下友情链接,希望加上。
轻狂志
http://www.flighty.cn
一句话简介:临风睨天笑,扬眉剑出鞘!
其实MacType已经出到1.2012.1022.0了..
这个文章是很早之前写的了
看看尾巴,哈哈
你修改的QQ中的辅助工具.bat一闪即逝,这篇文章的方法都解决不了。我电脑大部分批处理都是这样,但也有小部分是正常的。。。怎么解决。。。。
按照文中“先Win+R打开运行窗口,输入CMD回车,打开CMD窗口,然后将批处理文件拖入CMD窗口,此时文件的路径会出现在屏幕上,然后按回车即可。”这个方法看看有什么提示
提示:’tasklist’ 不是内部或外部命令,也不是可运行的程序或批处理文件
这属于环境变量%PATH%有问题
解决了,谢谢
我不会写path的变量值
厉害哦!
不知J大还关注这篇留言不?环境变量更改 的确会引起bat闪退 之前正常 安装了jdk,配置环境变量后(配置正确) 就闪退了 纠结
求助:tskill explorer.bat 内就 tskill explorer 这条命令
1、在资源管理器里点击运行成功
2、但我在“ObjectDock”+“Stacks Docklet 1”上点击就提示:’tskill’不是内部或外部命令……
和解?
试试换成”%windir%\system32\tskill”
依旧是上面那个环境:
1、tskill:’tskill’ 不是内部或外部命令,也不是可运行的程序或批处理文件。
2、%windir%\system32\tskill:’C:\Windows\system32\tskill’ 不是内部或外部命令,也不是可运行的程序或批处理文件。
看上去应该是权限问题,估计关闭UAC就好了
关闭UAC的,而且dock上可调用系统右键菜单,我选择以管理员启动,依旧这问题。。
http://wenwen.soso.com/z/q436935071.htm
这个问题 何解?就是:
cmd 命令 设置服务 自动(延迟启动):
sc config “服务名” start=?
delayed-auto
其实可以打 sc config help 查看的,当时怎么没想到。
我想知道你用的什么windows主题。。。。
hi,我最近也遇到了这个问题,是在使用node过程中出现的。主要是node命令可用,npm命令无法使用。查来查去,发现是cmd文件执行无效,点击之后闪一下就消失了。命令窗口直接执行就跟普通回车换行样没反应,但是像ipcinfog系统命令都是有效的。
然后我自己编写了个简单的bat文件,就是一行echo,一行pause,运行也是只闪一下。 望邮件答复下,非常谢谢~
ipconfig,敲错了
CMD 里 可不可以实现这样的功能?
打开1.exe程序并向它发送enter键
start 1.exe 然后怎么发送?
新建一个1.txt内容就是一个回车,然后cmd里1.exe < 1.txt
学习一下看看
分析的不错
好文章
win 10 好像改了啊!
测试了一下,只是改了A&B.bat的情况,现在只会执行A.bat,不会执行B.bat了。并没有修复这个bug。
最近在学for命令,那个百分号太隐藏了,找了半天