2009年11月13日

折腾:批处理文件不能运行了,修改代码页编码是最终解决方案

晚上想再改改博士论文,修改几处后想看看Latex的生成效果。由于WinEdt默认的编译对于我目前的模板存在问题,只能运行批处理文件中预订好的处理流程。

一下子,问题出现了,我的BAT文件不能运行!

起初以为是个小问题,想吃完饭回来就会轻松搞定。最后采用了各种方法折腾,例如,杀毒、升级Windows、修正BAT的关联等等。但是还是一点改观都没有。这种情况的结果是任何BAT都不能运行,运行效果就是没有任何反应。但是如果将BAT中的命令在dos中单独运行却能够正确处理。

真是百思不得其解。网上看来是不能找到这个问题的解决方案了。

后来,忽然想起自己前一段时间尝试解决在Dos下显示utf-8编码的文字。好像修改过一些地方。回想当初的处理如下:

----------------------------------------------------

DOS设置UTF8

1、打开CMD.exe命令行窗口

2、通过 chcp命令改变代码页,UTF-8的代码页为65001

chcp 65001

执行该操作后,代码页就被变成UTF-8了。但是,在窗口中仍旧不能正确显示UTF-8字符。

3、修改窗口属性,改变字体

在命令行标题栏上点击右键,选择"属性"->"字体",将字体修改为True Type字体"Lucida Console",然后点击确定将属性应用到当前窗口。
----------------------------------------------------

当时配置完后我的Dos仍然不能显示UTF8编码。后来也就没有再处理这个问题。

刚才受到这个帖子(http://zhidao.baidu.com/question/29176612.html?fr=qrl&cid=89&index=3)的启发,想起来应该是我的Dos命令行窗口的编码问题。运行chcp后发现,果然我的代码页编码还是65001。运行chcp 936还原后就能在当前的命令行窗口中正确运行BAT文件了。但是关闭窗口,再打开一个命令行窗口,这个问题仍然存在,似乎Dos窗口中敲入chcp 936只对当前窗口有效。再一想,只能试试修改注册表了。结果参考下面这段文字就可以彻底解决这个问题了。

----------------------------------------------------

[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:000003a8

小说明一下:
十六进制"000003a8"或十进制"936",表示“936 (ANSI/OEM - 简体中文 GBK)”。
十六进制"000001b5"或十进制"437",表示“437 (OEM - 美国)”。

----------------------------------------------------

 

自此,我今晚折腾了三个小时终于算是彻底解决了问题。明日再继续修改我的博士论文。

从今天的问题解决过程中,得到两条启示,如果将来再遇到类似问题,解决策略如下:

1. 出现问题一定要想想可能的原因,然后逐一排查,还是不行的话就要个性化的思考一下是不是近期过什么特殊处理;

2. 如果进行某些特殊处理后未能得到理想结果,应该尽快恢复到原来的情景。

没有评论: