PsExecを使用して特定のファイル(主にバッチ)を実行すると、コマンドの前にこれらの奇妙な́╗┐記号が表示されます。私の最初の考えは、間違ったエンコーディングを使用していたということでしたが、チェックしたところ、すべてのファイルがUTF-8を使用していることに気付きました。
コマンドの前にこれらの奇妙な́╗┐記号が表示されます[…]すべてのファイルでUTF-8が使用されていました。
これには2つの原因があります。
cmd.exeはUTF-8をサポートしていません。システムの地域設定に応じて、常に「OEM」と呼ばれるシングルバイトエンコーディングの1つ(cp437、cp775など)を使用します。
(UTF-16もサポートすることを期待していましたが、明らかにサポートしていません。UTF-16BOMを追加したとしてもです。)
テキストエディターは、UTF-8「バイトオーダーマーク」(バイトEF
BB
BF
)をすべてのUTF-8ファイルの先頭に追加しています。
cmd.exeがスクリプトを読み取っても、マークの処理方法がわかりません。BOMは3つの通常のcp437文字、’
╗
┐
として認識され、それらの一部として使用されます。コマンド名。
UTF-8でエンコードされたファイルへのBOMの追加を停止するようにエディターを構成します。 (これはUTF-16でのみ意味があり、UTF-8ではvery役に立たない。)
バッチファイルをexeにコンパイルすると問題が解決しますか?
ええと
何
さらに @ dsolimanoの答え 、もしあなたがならVisual Studioを使用して、そして私の場合は2013です、私は次のようにして修正しました:
ここで、。batファイルをVisual Studio内から開くと、最初に次のプロンプトが表示されます。
言語の[〜#〜] dos [〜#〜]オプションに到達するまで、オプションをドリルダウンする必要があります。
[〜#〜] ok [〜#〜]をクリックして、ファイルを開きます。
わかりましたが、∩╗┐
文字がファイルの先頭にある場合は、それらを削除してファイルを保存する必要があります。これで、正しいエンコーディングが使用されます。これにより、次回プロンプトが表示されなくなります。
これらすべての準備が整ったら、view、edit、およびsaveyour。batfile( s)Visual Studio内からcmd.exeが与えないように前述の凶悪なエラー:
'∩╗┐'は、内部または外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されません。
それらは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
前に説明したように、この文字は署名として使用されるUnicode文字BOM(バイトオーダーマーク)であり、cmd.exeは認識しません。
多くの方法で安全に削除できます。
私は次のように非常に簡単にできることがわかりました: