「╗┐」は内部コマンドまたは外部コマンドとして認識されません


25

PsExecを使用して特定のファイル(主にバッチ)を実行すると、コマンドの前にこれらの奇妙な「╗┐」記号が表示されます。私の当初の考えは、間違ったエンコーディングを使用していたことでしたが、チェックした後、すべてのファイルがUTF-8を使用していることに気付きました。


代わりにUTF-16LEに変換しないのはなぜですか?
イグナシオバスケス-エイブラムス

違いは何ですか?
miestasmia

違いは、Windowsは通常UTF-8を使用しないことです。
イグナシオバスケス-エイブラムス

回答:


32

コマンドの前にこれらの奇妙なシンボルを取得します[…]すべてのファイルがUTF-8を使用していました。

これには2つの原因があります。

  1. cmd.exeはUTF-8をサポートしていません。システムの地域設定に応じて、「OEM」と呼ばれることが多いシングルバイトエンコーディングの1つであるcp437、cp775などを常に使用します。

    (UTF-16もサポートすると予想していましたが、明らかにそうではありません; UTF-16 BOMを追加したとしても。)

  2. テキストエディタはEF BB BF、すべてのUTF-8ファイルの先頭にUTF-8「バイトオーダーマーク」(バイト)を追加しています。

    cmd.exeがスクリプトを読み取るとき、マークの処理方法がわかりません。BOMを3つの通常のcp437文字として認識し 、コマンド名の一部として使用しようとします。

UTF-8でエンコードされたファイルへのBOMの追加を停止するようにエディターを構成します。(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. [ OK]をクリックして保存して終了します。

これで、Visual Studio内から.batファイルを開くと、最初に次のプロンプトが表示されます。

ここに画像の説明を入力してください

言語のDOSオプションが表示されるまで、オプションをドリルダウンします。

ここに画像の説明を入力してください

[ OK]をクリックして、ファイルを開きます。


わかりました、この時点でかなり明らかなはずですが∩╗┐、ファイルの先頭に文字が表示されている場合は、それらを削除してファイルを保存し、正しいエンコーディングで保存する必要があります。これは、次回のプロンプトが表示されないようにするものです。


これらすべてが整ったので、Visual Studio内から.batファイルを表示編集保存できるようになり、cmd.exeが前述のような厄介なエラーを表示しないようになります。

「∩╗┐」は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されません。


2
この修正はVS2017でも完全に機能します
Greg

私はこれを推測することはなかったでしょう。VS2019の有効なソリューションです。
hbulens

10

それらはUnicode Byte Order Marksです。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

前述のように、この文字は署名として使用されるユニコード文字BOM(バイトオーダーマーク)であり、cmd.exeは認識しません。

多くの方法で安全に削除できます。

次のように非常に簡単に行うことができました。

  1. Notepad ++でファイルを開く
  2. エンコードメニューに移動します
  3. オプションにチェックを入れます:BOMなしでUTF-8でエンコードします
  4. 保存して、それで終わりです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.