63204


お世話になります。

Windows10で、以下のようなコマンドを書いたテキストファイルを、「comand.bat」としてUTF-8形式で保存しました。

[code]

    echo off
    chcp 65001
    echo スタート：新宿
    echo ↓
    echo ゴール：東京
    pause
    
[/code]

このcomand.batファイルをダブルクリックして実行すると、「スタート：新宿」という文字列は正しく表示されますが、「ゴール：東京」という文字列が以下のようにコマンドと認識されてしまいます。

[code]

    '��：東京' is not recognized as an internal or external command,
    operable program or batch file.
    
[/code]

どうしてコマンドとして認識されてしまうのか教えてください。

補足：  
「echo ↓」を行わなければコマンドとして認識されないことを確認しています。  
また、「echo ↓ 」のように、矢印の後に半角スペースを入れることでコマンドとして認識されなくなることも確認しています。  
しかし、なぜこのようになるのかがわかりません・・・

補足2：  
cubickさんからのコメントを受けて、文字列をダブルクォートでくくってみたところ、正常に表示されました。  
ただし、echoされる文にはダブルクォートが表示されます。（以下、表示例）

[code]

    "スタート：新宿"
    "↓"
    "ゴール：東京"
    
[/code]


CC BY-SA 4.0
2020-02-19T09:08:20.463
63182
2020-02-20T06:58:59.827
2020-02-20T00:28:33.120
3060
30742
question
batch-file 文字コード
UTF-8で保存したバッチファイルを実行すると文字列がコマンドとして認識されてしまう


おそらく改行コードがLFになっているためだと思います。CRLFであれば問題ないようです。  
調査された方がいました。  
[miauのブログ - 改行コード LF
で日本語を含むバッチファイルの動作がおかしい件](https://miau.hatenablog.com/entry/20100929/1285768041)


CC BY-SA 4.0
2020-02-20T04:55:22.440
63200
2020-02-20T04:55:22.440
28970
63182
answer


おそらく、コマンドプロンプトはすでにシフトJISとしてバッチファイル全体を読んでおり、バッチファイルの中でコードページを切り替えても手遅れなのでしょう。バッチファイルを起動する前にコードページを切り替えると動くかもしれません。

「↓」を UTF-8 でエンコードすると E2 86 93 です。E2 がシフトJISの第一バイトなので、86は第二バイトとして処理され、93
もシフトJISの第一バイトなので、続く改行コードが第二バイトとして処理されてしまったのだと思います。


CC BY-SA 4.0
2020-02-20T06:58:59.827
63204
2020-02-20T06:58:59.827
3475
63182
answer