web-dev-qa-db-ja.com

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

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

26
miestasmia

コマンドの前にこれらの奇妙な́╗┐記号が表示されます[…]すべてのファイルでUTF-8が使用されていました。

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

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

    (UTF-16もサポートすることを期待していましたが、明らかにサポートしていません。UTF-16BOMを追加したとしてもです。)

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

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

UTF-8でエンコードされたファイルへのBOMの追加を停止するようにエディターを構成します。 (これはUTF-16でのみ意味があり、UTF-8ではvery役に立たない。)

バッチファイルをexeにコンパイルすると問題が解決しますか?

ええと

33
user1686

さらに @ dsolimanoの答え 、もしあなたがならVisual Studioを使用して、そして私の場合は2013です、私は次のようにして修正しました:

  1. Visual Studioを開きます。
  2. ツール>オプションをクリックします。
  3. テキストエディター>ファイル拡張子をクリックします。
  4. Extensionボックスに、batと入力します。
  5. Editorドロップダウンで、Source Code(Text)Editor With Encodingをクリックし、Addをクリックします。
  6. [〜#〜] ok [〜#〜]をクリックして、保存して終了します。

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

enter image description here

言語の[〜#〜] dos [〜#〜]オプションに到達するまで、オプションをドリルダウンする必要があります。

enter image description here

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


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


これらすべての準備が整ったら、viewedit、およびsaveyour。batfile( s)Visual Studio内からcmd.exeが与えないように前述の凶悪なエラー:

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

21
Code Maverick

それらは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
10
dsolimano

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

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

私は次のように非常に簡単にできることがわかりました:

  1. Notepad ++でファイルを開きます
  2. エンコーディングメニューに移動します
  3. オプションにチェックを入れます:BOMなしのUTF-8でエンコード
  4. 保存すると、それだけです。
5
Sabri