PsExecを使用して特定のファイル(主にバッチ)を実行すると、コマンドの前にこれらの奇妙な「╗┐」記号が表示されます。私の当初の考えは、間違ったエンコーディングを使用していたことでしたが、チェックした後、すべてのファイルがUTF-8を使用していることに気付きました。
PsExecを使用して特定のファイル(主にバッチ)を実行すると、コマンドの前にこれらの奇妙な「╗┐」記号が表示されます。私の当初の考えは、間違ったエンコーディングを使用していたことでしたが、チェックした後、すべてのファイルがUTF-8を使用していることに気付きました。
回答:
コマンドの前にこれらの奇妙なシンボルを取得します[…]すべてのファイルがUTF-8を使用していました。
これには2つの原因があります。
cmd.exeはUTF-8をサポートしていません。システムの地域設定に応じて、「OEM」と呼ばれることが多いシングルバイトエンコーディングの1つであるcp437、cp775などを常に使用します。
(UTF-16もサポートすると予想していましたが、明らかにそうではありません; UTF-16 BOMを追加したとしても。)
テキストエディタはEF
BB
BF
、すべてのUTF-8ファイルの先頭にUTF-8「バイトオーダーマーク」(バイト)を追加しています。
cmd.exeがスクリプトを読み取るとき、マークの処理方法がわかりません。BOMを3つの通常のcp437文字として認識し’
╗
┐
、コマンド名の一部として使用しようとします。
UTF-8でエンコードされたファイルへのBOMの追加を停止するようにエディターを構成します。(UTF-16でのみ意味があり、UTF-8では非常に役に立ちません。)
バッチファイルをexeにコンパイルすると問題は解決しますか?
あの
何
@dsolimanoの回答をさらに進めるために、特にVisual Studioを使用していて、私の場合は2013である場合、次のようにして修正しました。
これで、Visual Studio内から.batファイルを開くと、最初に次のプロンプトが表示されます。
言語のDOSオプションが表示されるまで、オプションをドリルダウンします。
[ OK]をクリックして、ファイルを開きます。
わかりました、この時点でかなり明らかなはずですが∩╗┐
、ファイルの先頭に文字が表示されている場合は、それらを削除してファイルを保存し、正しいエンコーディングで保存する必要があります。これは、次回のプロンプトが表示されないようにするものです。
これらすべてが整ったので、Visual Studio内から.batファイルを表示、編集、保存できるようになり、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