0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

バッチファイルが動作しないと思ったら文字コードが原因だったのでその対策

Posted at

背景

CSVファイルを生成して、決まったディレクトリに出力するバッチファイルを一日一回実行するタスクスケジューラを設定したのに、うまく動作していなかったので原因を調べていたら文字コードのせいでした。

開発環境

  • Windows10
  • VSCode

問題が起こっていた部分

.bat
REM こちらのバッチファイルはUTF-8で記述されていました
@echo off

set EXPORT_PATH=%~dp0日本語フォルダ\hoge.txt
echo %EXPORT_PATH% >> tmp.txt
...

上記のバッチファイルを実行してtmp.txtを確認すると…

.txt
***\譌・譛ャ隱槭ヵ繧ゥ繝ォ繝蜷構hoge.txt

解決方法

原因としては出力先のフォルダ名が日本語で、記述されたバッチファイルのエンコードがUTF-8なのに対して、実行するコマンドプロンプトの文字コード設定がShift_JISだった、ということでした。
なので、バッチファイル内に文字コードの設定を変更するような一文を追記することで正しい出力先を設定できるようにしました。

.bat
@echo off
chcp 65001 > nul
set EXPORT_PATH=%~dp0日本語フォルダ\hoge.txt
echo %EXPORT_PATH% >> tmp.txt
...

コマンドプロンプトの文字コードの設定はCHCPコマンドでできますので、今回の場合はUTF-8の65001に設定しています。
*バッチファイルの文字コードに合わせる

まとめ

当たり前に思われたかもしれませんが、CMDと.batの文字コード設定が違うと化けます。環境によってはバッチファイルの先頭にchcpコマンドでエンコーディングの設定をしましょう。

今回はバッチファイルの処理内容が単純なものだったため、動くだろうと思ってテストもせずにスケジューラ設定してしまったのは失敗でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?