╗┐不能识别为内部或外部命令


25

当使用PsExec执行某些文件(主要是批处理)时,我在命令前得到了这些奇怪的``╗┐''符号。我最初的想法是,我使用了错误的编码,但是经过检查,我意识到我所有的文件都使用UTF-8。


为什么不将它们转换为UTF-16LE?
伊格纳西奥·巴斯克斯

有什么不同?
miestasmia

区别在于Windows通常不使用UTF-8。
伊格纳西奥·巴斯克斯

Answers:


32

在我的命令[…]我所有的文件都使用UTF-8之前,我得到了这些奇怪的╗┐符号。

这有两个原因:

  1. cmd.exe不支持UTF-8。它始终使用通常称为“ OEM”的单字节编码之一-cp437,cp775等,具体取决于系统的区域设置。

    (我希望它也支持UTF-16,但显然不支持;即使我添加了UTF-16 BOM也是如此。)

  2. 您的文本编辑器正在向EF BB BF所有UTF-8文件的开头添加UTF-8“字节顺序标记”(字节)。

    cmd.exe读取脚本时,它不知道如何处理标记-它会将BOM表视为三个普通cp437字符 ,并尝试将其用作命令名称的一部分。

配置您的编辑器以停止将BOM添加到UTF-8编码的文件中。(它才有意义在UTF-16,并且是非常以UTF-8无用)。

将批处理文件编译为exe可以解决该问题吗?

什么


3
我不会说BOM在UTF-8中是“非常无用”的;尽管在这种情况下是这样。许多应用程序使用它们来确定文本实际上是UTF-8,而不是其他编码。
高高拱门

18

为了进一步解决@dsolimano的问题,如果您专门使用Visual Studio,在我的情况下是2013年,我可以通过以下操作对其进行修复:

  1. 打开Visual Studio
  2. 单击工具 > 选项
  3. 单击文本编辑器 > 文件扩展名
  4. 在“ 扩展名”框中,输入bat
  5. 编辑器下拉菜单中,选择带编码的源代码(文本)编辑器,然后单击添加
  6. 单击确定以保存并退出。

现在,当您从Visual Studio中打开.bat文件时,最初会出现以下提示:

在此处输入图片说明

您将要深入研究这些选项,直到使用您的语言的DOS选项:

在此处输入图片说明

单击确定以完成打开文件。


好的,尽管这时应该很明显,但是如果您可以∩╗┐在文件的开头看到字符,那么您应该删除它们并保存文件,现在使用正确的编码。这是防止您下次再次提示的原因。


所有这一切的地方,你会很高兴知道,你现在可以查看编辑保存您的蝙蝠从内部文件(S)的Visual Studio,这样的cmd.exe不再给你的上述令人发指的错误:

'∩╗┐'不被识别为内部或外部命令,可操作程序或批处理文件。


2
此修复程序也完全可以在VS2017中正常工作
Greg Trevellick

我永远都不会猜到。仍然是VS2019的有效解决方案。
hbulens

10

这些是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

4

如前所述,此字符是用作签名的Unicode字符BOM(字节顺序标记),而cmd.exe无法识别。

您可以通过多种方式安全地删除它。

我发现非常容易做到如下:

  1. 记事本++中打开文件
  2. 进入编码菜单
  3. 勾选选项:在没有BOM的情况下以UTF-8编码
  4. 保存,就是这样。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.