在winxp中我们喜欢用特别字符加字母组成文件名,这样子有利于我们更加容易区分与了解文件的意义,但是这些特别字符在win7中就有可能不能识别,下来我们就来看看这样的现像吧。
此问题在Win7所有版本中都会出现,具体表现为使用右键以管理员身份运行时批处理一闪即逝,双击运行则正常。这个问题是本人在去年12月的时候发现的,应该是Win7的一个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外,内容均为
PowerShell@Echo %~nx0
@Pause
1
2@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类似,也不截图了。