当使用PsExec执行某些文件(主要是批处理)时,我在命令前得到了这些奇怪的``╗┐''符号。我最初的想法是,我使用了错误的编码,但是经过检查,我意识到我所有的文件都使用UTF-8。
当使用PsExec执行某些文件(主要是批处理)时,我在命令前得到了这些奇怪的``╗┐''符号。我最初的想法是,我使用了错误的编码,但是经过检查,我意识到我所有的文件都使用UTF-8。
Answers:
在我的命令[…]我所有的文件都使用UTF-8之前,我得到了这些奇怪的╗┐符号。
这有两个原因:
cmd.exe不支持UTF-8。它始终使用通常称为“ OEM”的单字节编码之一-cp437,cp775等,具体取决于系统的区域设置。
(我希望它也支持UTF-16,但显然不支持;即使我添加了UTF-16 BOM也是如此。)
您的文本编辑器正在向EF
BB
BF
所有UTF-8文件的开头添加UTF-8“字节顺序标记”(字节)。
当cmd.exe读取脚本时,它不知道如何处理标记-它会将BOM表视为三个普通cp437字符’
╗
┐
,并尝试将其用作命令名称的一部分。
配置您的编辑器以停止将BOM添加到UTF-8编码的文件中。(它才有意义在UTF-16,并且是非常以UTF-8无用)。
将批处理文件编译为exe可以解决该问题吗?
嗯
什么
为了进一步解决@dsolimano的问题,如果您专门使用Visual Studio,在我的情况下是2013年,我可以通过以下操作对其进行修复:
现在,当您从Visual Studio中打开.bat文件时,最初会出现以下提示:
您将要深入研究这些选项,直到使用您的语言的DOS选项:
单击确定以完成打开文件。
好的,尽管这时应该很明显,但是如果您可以∩╗┐
在文件的开头看到字符,那么您应该删除它们并保存文件,现在使用正确的编码。这是防止您下次再次提示的原因。
所有这一切的地方,你会很高兴知道,你现在可以查看,编辑和保存您的蝙蝠从内部文件(S)的Visual Studio,这样的cmd.exe不再给你的上述令人发指的错误:
'∩╗┐'不被识别为内部或外部命令,可操作程序或批处理文件。
这些是Unicode 字节顺序标记。Cmd.exe无法理解它们。如果您使用ANSI编码在记事本中重新保存文件,则应该可以解决此问题。
例如,我创建了以下批处理文件:
echo Hello World
首先,我将其保存为UTF-8编码
C:\Users\DSolimano\Desktop\junk>test.bat
C:\Users\DSolimano\Desktop\junk>echo Hello World
'echo' is not recognized as an internal or external command,
operable program or batch file.
然后用Unicode
C:\Users\DSolimano\Desktop\junk>test.bat
C:\Users\DSolimano\Desktop\junk>■e
'■e' is not recognized as an internal or external command,
operable program or batch file.
最后是ANSI
C:\Users\DSolimano\Desktop\junk>test.bat
C:\Users\DSolimano\Desktop\junk>echo Hello World
Hello World