次の方法で共有

バッチファイルの不可思議な動作

M. Yoshitani 20 評価のポイント
2025-08-11T06:14:32.76+00:00

enter image description here
下のようなHDDをフォーマットするバッチファイルをコマンドプロンプト上で実行すると添付画面のようにぐちゃぐちゃな表示となってしまいます(それはF:ドライブが存在しない時の表示)。
皆様がテストされる場合には"set DRIVE=F:"は存在しないドライブに書き換え下さい。

一体どうなっているのかおわかりになりますか。

バッチファイルはシフトJISで改行コードはCrLfにしてあります。

PCの再起動やターミナルアプリのリセットはやってみましたが変わりませんでした。


setlocal

set DRIVE=F:

set LABEL="Apacer PHD"

echo %DATE% %TIME% %DRIVE%ドライブのフォーマットを開始

format %DRIVE% /fs:ntfs /p:1 /v:%LABEL% /y > format.log

echo %DATE% %TIME% フォーマット完了

endlocal

家庭向け Windows | Windows 11 | アプリ

質問作成者が受け入れた回答

  1. motosan 3,225 評価のポイント
    2025-08-11T09:27:46.0833333+00:00

    再現しました。

    エンコードを下記のようにしました。

     日本語(Shift-JIS

     改行=LF

    (追記 改行を CRLF に変更すると正しく動作します。)

    >test.bat
    >setlocal
    >EL="Apacer PHD"
    'EL' は、内部コマンドまたは外部コマンド、
    操作可能なプログラムまたはバッチ ファイルとして認識されていません。
    >IVEドライブのフォーマットを開始
    'IVEドライブのフォーマットを開始' は、内部コマンドまたは外部コマンド、
    操作可能なプログラムまたはバッチ ファイルとして認識されていません。
    >DRIVEntfs /p:1 /v: /y  1>format.log
    'DRIVEntfs' は、内部コマンドまたは外部コマンド、
    操作可能なプログラムまたはバッチ ファイルとして認識されていません。
    >TETIME フォーマット完了
    'TETIME' は、内部コマンドまたは外部コマンド、
    操作可能なプログラムまたはバッチ ファイルとして認識されていません。
    >endlocal
    
    1 人がこの回答が役に立ったと思いました。

2 件の追加の回答

並べ替え方法: 最も役に立つ
  1. ウィンドウズスクリプトプログラマ 7,030 評価のポイント
    2025-08-11T10:48:37.01+00:00

    batch file lf - Google 検索

    改行コード LF で日本語を含むバッチファイルの動作がおかしい件 - miauのブログ

    これですね。

    2010-09-29 ですって。

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

    結構、ポピュラーな問題のようで、言及してる人が多いですね。 


  2. Emmanuel Santana 38,850 評価のポイント 独立アドバイザー
    2025-08-11T08:13:23.13+00:00

    こんにちは。皆さんのご意見はどれも素晴らしく、とても参考になります。私からも、念のため別の視点で提案させてください。

    setlocal を外す、各行を手動で実行してみる、type コマンドで内容を確認する、などのテストはどれも有効だと思います。ただ、私が疑っているのはもう少し根本的な問題で、バッチファイル自体のエンコーディングに起因する破損の可能性です。

    たとえ type test.bat で内容が正常に表示されていて、テキストエディタ上でも問題がないように見えても、保存形式によっては Windows のコマンドパーサーが行を誤って解釈することがあります。特に以下のようなケースです:

    • BOM付きの Shift-JIS
    • BOM付きの UTF-8
    • リッチテキスト環境などからコピーされた不可視の全角文字が混入している場合

    こういった問題は見た目では分かりにくくても、setecho のような行がスキップされたり、正しく実行されなかったりします。

    以下の手順を試してみてください:

    1. ファイルを「メモ帳」で開く。(Notepad++ や VS Code ではなく、標準の「メモ帳」を使用)
    2. スクリプトをすべて手動で再入力する。(コピー&ペーストはしない)
    3. 次の設定で保存する:
      • エンコーディング:ANSI
      • 改行コード:CRLF
    4. ファイル名を clean_test.bat として保存し、実行してみてください。

    さらに、以下のコマンドを実行して行の解析状態を確認することもできます:

    type test.bat | findstr /n "^"
    

    もし一部の行が表示されなかったり、行がつながってしまっている場合は、エンコーディングやBOMが原因でパーサーが正しく認識できていないことが分かります。

    このような「見えない破損」は、PCのリセット後やコードページの変更、エディタの設定ミスなどで発生することがあり、外見上は正常に見えるため原因の特定が難しいです。

    少しでも原因切り分けの助けになれば幸いです。


お客様の回答

質問作成者は回答に "承認済み"、モデレーターは "おすすめ" とマークできます。これにより、ユーザーは作成者の問題が回答によって解決したことを把握できます。