LoginSignup
3
0

More than 1 year has passed since last update.

パスに日本語が含まれるプログラムをバッチファイルから上手く実行できない時の対処法(Python)

Posted at

結論

バッチファイルを書き始める前に、以上の2点を確認することをお勧めします。(後で直すと少し面倒くさいです…)

文字化けして実行できない時

下のようなフォルダ名に日本語を含む階層構造でプログラムを用意し、バッチファイルからPythonのコード動かしてみます。

ファイル構成
C:\プロジェクト
     |-プログラム
     |   |-hello.py
     |-pyexe.bat
hello.py
print("hello")
pyexe.bat
python C:/自動実行/プログラム/hello.py

それでは、ターミナルを開き実行してみましょう。

ターミナル
$ C:\プロジェクト>pyexe.bat
実行結果
$ C:\プロジェクト>python C:/繝励Ο繧ク繧ァ繧ッ繝・繝励Ο繧ー繝ゥ繝/hello.py 
python: can't open file 'C:\\繝励Ο繧ク繧ァ繧ッ繝・繝励Ο繧ー繝ゥ繝\uf8f0\\hello.py': [Errno 2] No such file or directory

完璧に文字化けしてしまっていますね。。。
実行結果の一行目からバッチファイルが読み込めていることはわかります。

原因

これは文字コードが【UTF-8】になっていることが原因です。
パスに日本語が含まれる場合は、文字コードを【SHIFT-JIS】に変更する必要があります。

対処法

VSCodeであれば、ステータスバーからクリックで簡単に変更できます。

右下のエンコードの選択(赤丸で囲ってある箇所)のUTF-8をクリック
画像3.png

アクションの選択で、エンコード付きで再度開くをクリック
image.png

下図のようにエンコードの選択が出てくると思いますので、Japanese (Shift JIS)を選択します。
image.png

変更できると画面右下が次のようになります。
image.png

すると今度はバッチファイルの中身が文字化けするかと思います。

autoexe.bat
python C:/繝励Ο繧ク繧ァ繧ッ繝�/繝励Ο繧ー繝ゥ繝�/hello.py

ですので面倒ですが、パスを正しく書き換えてあげてください。

autoexe.bat (書き換え後)
python C:/プロジェクト/プログラム/hello.py

では、改めて実行してみます。

実行結果
$ C:\プロジェクト>pyexe.bat

$ C:\プロジェクト>python C:/プロジェクト/プログラム/hello.py 
Hello World.

正しく実行できました。

改行がなんか変な時

複数行にわたってバッチファイルを記述すると、改行が変なところで起きてしまい、うまく実行できないことがあります。

ここでは、Pythonプログラムをコマンドライン引数を変えながら自動実行させる例を挙げます。
以下のような構成でファイルを用意します。

ファイル構成
C:\自動実行
     |-プログラム
     |   |-hello.py
     |-autoexe.bat
hello.py
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('message', type=str)
args = parser.parse_args()

print("Hello {}.".format(args.message))
autoexe.bat
python C:/自動実行/プログラム/hello.py World
python C:/自動実行/プログラム/hello.py Japan
python C:/自動実行/プログラム/hello.py Python

ではautoexe.batを実行してみましょう。

実行結果
C:\自動実行>autoexe.bat

C:\自動実行>python C:/自動実行/プログラム/hello.py World
Hello World.

C:\自動実行>/プログラム/hello.py Japan
指定されたパスが見つかりません。

C:\自動実行>/自動実行/プログラム/hello.py Python

????
autoexe.batの一行目はうまく実行できていますが、途中からなにやら挙動がおかしいです。。。
改行が変なことになって、autoexe.batのコードがちょこちょこ消えています。

原因

改行コードが【LF】や【CR】になっていることが原因として挙げられます。
UNIX系ではLFが標準になっていますね。
これを【CRLF】に変更する必要があります。

※改行コードの違いは以下を参照

対処法

VSCodeであれば、文字コード同様、ステータスバーからクリックで変更できます。

右下の改行コードの選択(赤丸で囲ってある箇所)のLFをクリック
画像4.png

改行コードの選択でCRLFを選択
image.png

これで完了です。
変更されると、ステータスバーに選択した文字コードが表示されると思います。
image.png

では、改めて実行してみます。

実行結果
$ C:\自動実行>autoexe.bat

$ C:\自動実行>python C:/自動実行/プログラム/hello.py World
Hello World.

$ C:\自動実行>python C:/自動実行/プログラム/hello.py Japan
Hello Japan.

$ C:\自動実行>python C:/自動実行/プログラム/hello.py Python
Hello Python.

今度は改行が適切な位置で行われ、うまく実行できました。

所感

面倒なのでフォルダ名などには極力日本語を入れない方がベターかなと思います。
やむを得ず日本語が含まれる場合は、以上の対処法を試してみてください。

バッチファイルからのpython実行は、ディープラーニングの学習等でパラメータを変えながら夜通し実行する際は便利ですね。

3
0
1

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
3
0