4

这个问题基本上说明了问题。

我正在使用 Windows XP Pro Service Pack 3
ComSpec=C:\WINDOWS\system32\cmd.exe
我通过 Start... Run-dialog... cmd.exe 启动了控制台

这是我的控制台的“视图”:
命令,然后是输出(以及我的 // 注释)

C:\> chcp 850
Active code page: 850
// output is as expected

C:\> echo @chcp ^& REM 850>test850.cmd
// no output; as ecpected)

C:\> type test850.cmd
@chcp & REM 850
// output is as expected

C:\> call test850.cmd
Active code page: 850
// output is as expected

以上工作正常(如预期)。Windows 领域的事情很开心,但是当我切换到代码页 65001 时“调用”失败

C:\> chcp 65001
Active code page: 65001
// output is as expected

C:\> echo @chcp ^& REM 65001>test65001.cmd
// no output; as ecpected

C:\> type test65001.cmd
@chcp & REM 65001
// output is as expected

C:\> call test65001.cmd
// NO OUTPUT, NO ERROR, NO ANYTHING, NADA... other than frustration :)

这里发生了什么(没有发生)?

4

2 回答 2

4

有趣的是,它实际上根本没有运行它。如果您执行以下操作:

pax> echo echo yy >xx.cmd
pax> chcp 850
pax> xx
yy
pax> chcp 65001
pax> xx
pax> _

什么也得不到。它不仅仅是缺少输出,它根本没有运行(正如放在行start .前所证明的那样echo)。在代码页 850 中,Explorer 运行,但对于代码页 65001 则不然。

这里有一些关于这个问题的讨论。你可以让你的脚本运行:

chcp 65001 && xx.cmd && chcp 850

所以在启动命令文件时似乎是某种问题,但只有在输入命令之前代码页为 65001 时!

考虑到cmd.exe. 这是您必须自己评估的决定,但是,我自己在一个大型组织中使用许多工具来完成相同的工作,我怀疑 Microsoft 将在 PowerShell 而不是旧的命令 shell 之后进行任何增强工作。他们的资源很大,但不是无限的。

于 2010-08-04T01:49:11.013 回答
1

造成这种情况的原因是当 Windows XP 的 cmd.exe 内部调用函数 MultiByteToWideChar 时使用参数 dwFlags 值为 1。文档说:“对于 UTF-8 dwFlags 必须设置为 0。否则,函数失败” .

这里有一个补丁:http: //consolesoft.com/p/cmd-xp-65001-fix/index.html

于 2014-05-20T04:45:37.870 回答