如果调用chcp,则不执行批处理脚本

时间:2010-02-02 07:58:48

标签: unicode batch-file cmd

我正在尝试使用批处理脚本删除一些带有unicode字符的文件(这是一项要求)。所以我运行cmd并执行:

> chcp 65001

有效地将代码页设置为UTF-8。它有效:

D:\temp\1>dir
 Volume in drive D has no label.
 Volume Serial Number is 8C33-61BF

 Directory of D:\temp\1

02.02.2010  09:31    <DIR>          .
02.02.2010  09:31    <DIR>          ..
02.02.2010  09:32               508 1.txt
02.02.2010  09:28                12 delete.bat
02.02.2010  09:20                95 delete.cmd
02.02.2010  09:13    <DIR>          Rún
02.02.2010  09:13    <DIR>          Гуцул Каліпсо
               3 File(s)            615 bytes
               4 Dir(s)  11 576 438 784 bytes free

D:\temp\1>rmdir Rún

D:\temp\1>dir
 Volume in drive D has no label.
 Volume Serial Number is 8C33-61BF

 Directory of D:\temp\1

02.02.2010  09:56    <DIR>          .
02.02.2010  09:56    <DIR>          ..
02.02.2010  09:32               508 1.txt
02.02.2010  09:28                12 delete.bat
02.02.2010  09:20                95 delete.cmd
02.02.2010  09:13    <DIR>          Гуцул Каліпсо
               3 File(s)            615 bytes
               3 Dir(s)  11 576 438 784 bytes free

然后我在批处理脚本中放入相同的rmdir命令并将其保存为UTF-8编码。但是,当我运行没有任何反应时,几乎没有任何东西:在这种情况下,即使回声也不是批处理脚本。即使在OEM编码中保存脚本也无济于事。

因此,当我在控制台中将代码页更改为UTF-8时,脚本就会停止工作。有人知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:9)

如果要在批处理文件中支持unicode,则单独CHCP就会中止批处理文件。我建议将CHCP放在需要unicode的每个批处理文件行上,如下所示

chcp 65001 > nul && <real command here>

示例:在我的情况下,我想在调试时获得一个很好的TAIL日志文件,但是甚至拉丁字符1字符的内容也搞砸了。所以这是我的批处理文件,它从Windows Resource Kit中包装真正的尾部实现。

@C:\WINDOWS\system32\chcp.com 65001 >nul && tail.exe -f %1

此外,要输出到控制台,您需要设置一个真正的字体,即Lucidia Console。

显然,对于输出到文件,命令行需要以Unicode运行,因此您将按照以下步骤启动批处理脚本

cmd /u /c <batch file command here>

免责声明:使用Windows Resource Kit在Windows XP sp3上测试。

答案 1 :(得分:0)

控制台中的Unicode支持,尤其是批处理文件中的Unicode支持非常糟糕。 您是否可以“扭曲”PowerShell或Active Scripting(VBScript或JScript)的要求?

从长远来看,它会为你带来很多痛苦(如果你需要超越这个简单的任务而增长)

更不用说PowerShell和ActiveScripting都使用更强大的语言,允许函数,正确的循环,实变量,调试器,为更严肃的项目提供许多好处。

答案 2 :(得分:0)

尝试在批处理文件中插入空行作为第一行...

第1行:

第2行:CHCP 65001

第3行:脚本命令

应该工作!