【Batch】「・ソ」の謎

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【Batch】「・ソ」の謎

2023-8-2 |
200px200px

Batchファイルを起動すると最初のコマンドの先頭に付く「・ソ」の謎を解き明かしたい!

概要

今回の記事では、Batchファイルを起動すると最初のコマンドの先頭に付く「・ソ」の謎について掲載する。

環境

  • Windows 10 Home 22H2 (OSビルド19045.3086)

手順書

ある日、下記のようなどシンプルなBatchファイルを実行したところ

@echo off

rem なにやら物凄い処理

@echo offの先頭に謎の「・ソ」が付いてコマンドの実行に失敗する。

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

「・ソ」

ちなみにその後の「なにやら物凄い処理」は問題なく実行される。

下記の記事の時は様子が違うけども、同じように文字化けの気配が!

しかし、Batchファイルってただのテキストファイルなのに、なぜエディタで見えない文字が勝手に挿入されるんだ!?

霊魂の類か!

原因

テキストファイルでもエディタで見えない文字?があった!

ファイルの先頭にBOM(Byte Order Mark)が付いてるテキストファイルがあって、Unicodeとかでエンコードされてるテキストファイルがそうだったりする。

BOMの目的はByte Order Markってあるとおりでバイトの並び方をファイルの先頭で教えてる。
下記はUTF-8とUTF-16の例。

BOMの種類 BOM(16進数)
UTF-8 EF BB BF
UTF-16LE FF FE
UTF-16BE FE FF
UTF-32LE 00 00 FF FE
UTF-32BE FE FF 00 00

LEはリトルエンディアンで後ろのバイトから並べてく。BEはビッグエンディアンで逆に前からバイトを並べてく。

実際に該当のBatchファイルをバイナリエディタ(Stirling)で開いて確認してみると

「・ソ」があった!

今回は意図せずにBOM付きのUTF-8でBatchファイルを作って動かそうとしていたので「・ソ」が付いたと。日頃このBOMを意識してBatchファイルを作ったことがなかっんだけども、どこでBOMが付いたのか。

このBatchファイルなんだけども、Visual Studioの新規追加から作った際に間違って、テキスト以外のJSX(うろ覚え)を選択してしまって、後からbatch.batみたいな感じでリネームして使ってて、この選択したプリセット的なものにBOMが付いていたんだと思われ。

解決方法

このBatchファイルを正常に動くようにするには

  • バイナリエディタでBOMの部分を削る。

もしくは

  • Visual Studioの場合はテキストファイルのプリセットから作り直す。

Visual Studio Codeやエクスプローラーの新規作成でファイルを作る場合はBOMが付かないので意識する必要ない。

まとめ(感想文)

蘇(ソ)。