バッチファイルが文字化けして実行できない
忘れないようにするために、自分のためにメモ。
あるバッチを作っていた。
フォルダを古い順にソートして、残すフォルダの数を指定し、それよりも古いフォルダを削除する。
正しくは「フォルダ名の昇順にソートして」だが、フォルダの「名前が年月日-時分秒」だから古い順と同じ意味。
一度成功していたんだけど、あるとき実行するとバッチファイル名そのものが文字化けして正しく実行できなくなった。
(写真1)バッチ実行時のバッチファイルそのものの文字化け
バッチ実行中のechoなどの文字化けならともかく、実行したバッチファイル名そのものが化けている。
そのためバッチファイルを正しく解釈できずに、「内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」となってしまう。
何度かは正常に実行できていたのになあ。
(写真2)バッチをエディタで見ると文字コードがunicode
原因がわかってきた。
バッチファイルの文字コードはSIFT-JISじゃなきゃだめなのね。
なのに文字コードがunicodeになっている。
(写真3)バッチファイルは正しく実行された
バッチファイルの文字コードをSHIFT-JISに変更すると正しく実行できた。
まずは一安心。
考えてみたら以前にも何度か同じことをやったような気がする。
テキストエディタはもう長年TeraPadを使っているのだけど、書き込むときの規定値がunicodeになっていたからかな。
まあいいや、SHIFT-JISで書き込めば済む話だから。
肝心のフォルダ削除バッチはほぼ完成。
あるフォルダの下に「年月日-時分秒」フォルダを作成してデータをバックアップ。
定期的に削除バッチを実行し、決められたフォルダ数(世代数)だけを残してそれよりも古い世代のバックアップフォルダを削除する。
今までも単体のファイルを指定した世代数だけ残してそれよりも古いファイルを削除するバッチは作っていたが、今回はフォルダの削除に挑戦でした。