例如,假设我有一个批处理文件叫做test.cmd
,它只包含:
echo %1
我可以直接从命令提示符中使用 test.cmd some-arg
调用它,结果是打印字符串 some-arg
。
然而,如果我将相同的调用放在第二个批处理文件中,称为 tester.cmd
,为了论点而言,如果我从命令提示符中调用它,结果是打印字符串 some%arg
。
什么东西搞乱了编码,我该如何避免?我确定以前我解决过这个问题,但我想不起来了…
谢谢!
例如,假设我有一个批处理文件叫做test.cmd
,它只包含:
echo %1
我可以直接从命令提示符中使用 test.cmd some-arg
调用它,结果是打印字符串 some-arg
。
然而,如果我将相同的调用放在第二个批处理文件中,称为 tester.cmd
,为了论点而言,如果我从命令提示符中调用它,结果是打印字符串 some%arg
。
什么东西搞乱了编码,我该如何避免?我确定以前我解决过这个问题,但我想不起来了…
谢谢!
这是因为您的批处理文件编码不同于cmd.exe当前所在的编码页。
在西方默认配置中,cmd.exe以CP850启动,但文本编辑器通常使用CP1252(常常被错误地称为Latin-1或ISO-8859-1)。
在这两个代码页面中,“¬”和“¼”字符共享相同的字符代码“BC”。
解决方案很简单。要么将批处理文件编码为代码页850,要么通过发出chcp 1252
将cmd.exe切换到代码页1252。