utf8でバッチを作成したら、怪奇現象が起きる。
解決したいこと
バッチで、outlookにスケジュールを登録するための.icsファイルを作成しようとしてます。
で、いつものように、SJISのバッチで作ったら、リダイレクト出力した.icsファイルもSJISになる。
でも、.icsファイルって、UTF-8でないと日本語が化けてしまうんですね。
SJIS形式のファイルを、powershellでUTF-8に変換しても良いのだが、そもそも、バッチファイルを
UTF-8形式にすれば、リダイレクトで作成するファイルがUTF-8になることが分かったので、
バッチをUTF-8で作成しました。
動きはしたのですが、怪奇現象が起きます。
怪奇現象1
remが途中からコマンドに解釈されて、エラーというか、警告がでる。
(停止はしないです。)
怪奇現象2
最後の行のコマンドが実行されない。
とりあえずの回避
とりあえず、このままではリリースできないので、
1.remはgotoでスキップさせる。
2.最後の行の後に空行を入れておく。
というので逃げてますが、原因と他処方があれば教えてください。
該当するソースコード
全文を書くと長いので、その怪奇現象部分だけにき出しました。
解決したら全文を公開します。
@echo off
rem 文字コードの影響かわかりませんが、以下のremがremとして認識されず、途中からコマンドと認識されてしまう現象が起きてます。
rem goto :start
rem やむを得ず、gotoでスキップします。
rem このバッチはTeamsに登録するスケジュールを作成します。
rem TeamsはUTF-8Nのファイルで入力する必要があるので、バッチ自体をUTF-8で作成しています。
rem shift-JISで保存しないでください。
:start
rem 怪奇現象としか思えない。「おしまい」の前後の空行をVSで削除すると、「おしまい」が表示されなくなります。ただし、最後の改行は、エディターで開くと、有無の区別が分からない。
echo おしまい。
自分で試したこと
VS Codeで、上記を、UTF-8のバッチファイルとして保存します。
怪奇現象1
実行すると、rem goto :start以降のremの一部がエラー表示されます。
goto のremを外すとエラーはなくなりますが、その状態で、色々な行に移すと、色々なところでエラーが出ます。
怪奇現象2
VS Codeの最後の、おしまいの後の改行を削除すると、おしまいが表示されなくなります。
これは、eof(End of File)の関係かとも思いますが、SJISとETF-8で何か違うんですかね。