Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What is going on with this article?
@yuki_2020

windowsでpythonのプログラムを簡単に動かすバッチファイルまとめ

はじめに

pythonのプログラムをコマンドプロンプトやアナコンダプロンプトから実行するのは面倒くさいですよね。
まずスクリプトのあるディレクトリまで移動しなければいけないですし、コマンドラインでの因数が必要になってくるとそれを入力するのはとても大変だと思います。
そこでwindowsのバッチファイルを使用して簡単に実行できるようにする方法を書きます。

忙しい人向け

2021-03-20 18-50-19.gif

call C:\Users\ユーザー\Anaconda3\Scripts\activate.bat
call activate base
for %%i in (%*) do (
python %%i
)

これをメモ帳にコピペして適当な名前.batで保存。
実行したいプログラムをこのバッチファイル上にドラッグアンドドロップする(複数可)
そうするとドラッグアンドドロップされたファイルが順番に実行されていく。

できるようになること

・ドラックアンドドロップで複数のスクリプトの実行
・ドラックアンドドロップであるアナコンダ環境でのスクリプトの実行
・ダブルクリックで指定の複数プログラムの連続実行
・複数プログラムの同時実行

などです。

前提1.どのディレクトリでプログラムを実行するか

プログラムの中身を相対パスで書いている場合(多くはそうだとは思いますが)、プログラムを実行するディレクトリが大切になってきます。

ここでは、
1バッチファイルのあるディレクトリで実行
2動かすプログラムがあるディレクトリで実行
3それ以外の特定のディレクトリで実行
の三つに分かれると思います。

1バッチファイルのあるディレクトリで実行

cd /d %~dp0

これを最初につけます

詳しくはこちら

2動かすプログラムがあるディレクトリで実行

最初には何も書きません。

3それ以外の特定のディレクトリで実行

最初に

cd ディレクトリのパス

を書く

前提2.anacondaで実行するか

pythonをanacondaで入れている人は多いと思います。
しかし
1anaconda以外でpythonを入れており、パスが通っていない
2anaconda以外でpythonを入れており、パスが通っている
3anacondaで実行する
に大きく分かれます。

1anaconda以外でpythonを入れており、パスが通っていない

これから記事で紹介するときの

python 実行するプログラム.py

の部分を

ディレクトリのパス\python.exe 実行するプログラム.py

にしてください。

参考

2anaconda以外でpythonを入れており、パスが通っている

何もする必要はありません。

3anacondaで実行する

call C:\Users\ユーザー\Anaconda3\Scripts\activate.bat
call activate 仮想環境名

これを最初につけてください。
ここで、アナコンダを入れてから環境を作っていない人や、仮想環境?なにそれおいしいの?という人は、仮想環境名はbaseです。

参考

前提3.実行したいファイルはどこにあるか

ドラッグアンドドロップの時は考えなくてもいいのですが、
ダブルクリックで実行するときに問題になってきます。
バッチファイルと同じディレクトリ内に実行ファイルがあるときはファイル名はそのままで
python filename.pyでいいのですが、
そこにないときは、
python C:\user\username\path\filename.py
というように絶対パスか相対パスを書いてください。

実際のバッチファイル

バッチファイルの中身を書いていきたいと思います。
なお、今回は
1.Anaconda環境の初期のbaseで実行し、pathを通していない
2.バッチファイルがあるディレクトリで実行する

という条件で書いていきたいと思います。
上に書いてある前提の内容を参考にして自分に合ったスクリプトにしてください。

1.ダブルクリックであるプログラムの実行

cd /d %~dp0
call C:\Users\ユーザー\Anaconda3\Scripts\activate.bat
call activate base
python test.py

callはほかのバッチファイルを実行するときに使用します。
今回はanacondaの環境にするために二つのバッチファイルを実行します。
そのほかは普段コマンドプロンプトに書いている内容と同じだと思います。

2.ドラックアンドドロップでスクリプトの実行

cd /d %~dp0
call C:\Users\ユーザー\Anaconda3\Scripts\activate.bat
call activate base
python %1

との変更点はtest.pyという具体的な名前が%1に変わった点です。
この%1というのはドラッグアンドドロップされたファイルのうち最初のファイル名になります。
参考

3.ダブルクリックで指定の複数プログラムの連続実行

cd /d %~dp0
call C:\Users\ユーザー\Anaconda3\Scripts\activate.bat
call activate base
python test.py
python test2.py
python test3.py

バッチファイルは上から一行ずつ実行しているだけなので、
プログラムの実行を追加していくだけです。
同時ではなく、連続実行です。
そのため上のプログラムが終了しないと次のプログラムは実行されません。

3.ドラックアンドドロップで複数のスクリプトの実行

cd /d %~dp0
call C:\Users\ユーザー\Anaconda3\Scripts\activate.bat
call activate base
for %%i in (%*) do (
python %%i
)

こちらを参考にしました

どうやら%*がドラッグアンドドロップされたすべてのファイルをさし、
それをforを使用して順番に実行しているだけみたいです。

4.複数ファイルを同時に実行

cd /d %~dp0
call C:\Users\ユーザー\Anaconda3\Scripts\activate.bat
call activate base
start python test.py
start python test2.py
start python test3.py

startというものを最初につけると、新しくウィンドウを開いて実行されます。
ウィンドウを開いた時点で次の行が実行されるのでほぼ同時に複数実行することができます。
パソコンのメモリやCPUの性能が悪いとパソコンの動作が遅くなり、最悪の場合フリーズする場合があるので注意してください。

5.複数ファイルを特定間隔で実行開始

cd /d %~dp0
call C:\Users\ユーザー\Anaconda3\Scripts\activate.bat
call activate base
start python test.py
ping 127.0.0.1 -n 5 > nul
start python test2.py
ping 127.0.0.1 -n 10 > nul
start python test3.py

ping 127.0.0.1 -n 5 > nulを挟むことで5秒の待機をしています。
上のコードは、
1. test.pyを実行
2. 5秒待機
3. test2.pyを実行
4. 10秒待機
5. test3.pyを実行
となっています。

その他

remと書くと、その行が無視されるので、コメントを書きたいときに使います。
・最後にpauseを追加するとバッチファイルが終了後もウィンドウが消えない
@echo offを最初につけるとバッチファイルに書いている内容が表示されないようになる。
・sleepを挟みたいときはping 127.0.0.1 -n 時間(s) > nulを書く

参考

その他バッチファイルについては自分で調べるか

こちらが詳しいです。

まとめ

pythonを学んでいる中で、コマンドラインでのディレクトリ移動や入力でいつも時間をとっていました。
バッチファイルを作りたかったのですが、なかなかすぐ動くスクリプトを載せているサイトがなく、分かりにくかったのでまとめがてら作りました。
ここに書いてあるのは最低限なので、自分なりにアレンジしていってください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
7
Help us understand the problem. What is going on with this article?