mie*_*mia 30 encoding batch psexec
当使用 PsExec 执行某些文件(主要是批处理)时,我得到这些奇怪的 ???' 我的命令前的符号。我最初的想法是,我使用了错误的编码,但经过检查,我意识到我所有的文件都使用了 UTF-8。
use*_*686 37
我觉得这些很奇怪???” 我的命令之前的符号 [...] 我所有的文件都使用 UTF-8。
这有两个原因:
cmd.exe不支持 UTF-8。它始终使用一种通常称为“OEM”的单字节编码——cp437、cp775 等,具体取决于系统的区域设置。
(我希望它也支持 UTF-16,但显然不是;即使我添加了 UTF-16 BOM。)
您的文本编辑器正在向EF BB BF所有 UTF-8 文件的开头添加一个 UTF-8“字节顺序标记”(bytes )。
当cmd.exe读取您的脚本时,它不知道如何处理标记 - 它会将 BOM 视为三个普通的 cp437 字符’ ? ?,并尝试将它们用作命令名称的一部分。
配置您的编辑器以停止向 UTF-8 编码文件添加 BOM。(它只在 UTF-16 中有意义,在 UTF-8 中非常无用。)
将批处理文件编译成 exe 会解决问题吗?
呃
什么
Cod*_*ick 25
为了进一步@dsolimano 的回答,如果您专门使用Visual Studio并且在我的情况下是2013,我通过执行以下操作来修复它:
现在,当您从Visual Studio 中打开.bat文件时,您最初会收到以下提示:

您将希望深入了解这些选项,直到找到您所用语言的DOS选项:

单击“确定”以完成打开文件。
好的,尽管此时应该相当明显,但如果您可以看到???文件开头的字符,则您应该删除它们并保存文件,现在使用正确的编码。这是防止您下次再次收到提示的原因。
有了所有这些,您会很高兴知道您现在可以从Visual Studio 中查看、编辑和保存您的.bat文件,以便cmd.exe不再给您上述令人发指的错误:
'???' 不是内部或外部命令,也不是可运行的程序或批处理文件。
dso*_*ano 10
这些是 Unicode字节顺序标记。Cmd.exe 不理解它们。如果您使用 ANSI 编码在记事本中重新保存文件,则应该可以解决问题。
例如,我创建了这个批处理文件:
echo Hello World
Run Code Online (Sandbox Code Playgroud)
首先我用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.
Run Code Online (Sandbox Code Playgroud)
然后用 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.
Run Code Online (Sandbox Code Playgroud)
最后与 ANSI
C:\Users\DSolimano\Desktop\junk>test.bat
C:\Users\DSolimano\Desktop\junk>echo Hello World
Hello World
Run Code Online (Sandbox Code Playgroud)
小智 6
如前所述,此字符是用作签名的 unicode 字符 BOM(字节顺序标记),cmd.exe 无法识别该字符。
您可以通过多种方式安全地删除它。
我发现很容易做到如下:
| 归档时间: |
|
| 查看次数: |
35155 次 |
| 最近记录: |