はじめに
こんにちは。この記事では、作業の自動化のためのWindows バッチファイル(以下、バッチファイル)の活用方法を演習していきます。今回は発展編と題しまして、基礎編より少し進んだ内容を学んでいきます。バッチファイルを扱ったことが無い方は、まずは基礎編から取り組んでみてください。
→基礎編
それでは、早速学んでいきましょう。
レッスン1.事前準備
バッチファイルの実行には特別なソフトウェアが不要でWindowsの初期状態でも実行可能ですので、基本的に事前準備は必要ありません。極端に言えば、メモ帳だけあれば作成可能です。
しかしながら、今回は少し高度な内容をコーディングしていきますので、効率を考え、メモ帳ではなくテキストエディタを用いることとします。既にお使いのエディタがあれば、そちらを使っていただいて結構です。まだテキストエディタを入れていない方にお勧めのエディタは「Visual Studio Code」です。下記にてインストールおよび使用方法を記事として準備してありますので、詳しくはそちらをご覧ください。
→VS Codeの記事
では、テキストエディタの準備ができたら、早速演習を進めていきましょう。
レッスン2.変数
バッチファイルでも、一般的なプログラミング言語のように変数を扱うことができます。下記のように変数に一旦代入した文字を、echoで表示するコードを書いてみましょう。「test.bat」という名前で保存しています。
今回登場したコマンドについて説明します。
変数に値をセットする
set [変数名]=[値、文字列]
変数の値を使う場合は、変数名を%%で囲んでください。
では、コードの変更が終わったら、実行してみましょう。
実行結果
D:\bat_test>echo NAMAE NAMAE
変数に格納した文字列が表示されたかと思います。これで変数を扱うことができます。注意として、バッチファイルの変数には型の概念がありませんので、変数名などを工夫して区別する必要があります。
レッスン3.条件分岐と繰り返し
では、続いて条件分岐と繰り返しについて学んでいきます。考え方は一般的なプログラミング言語と同じです。
1.条件分岐
まずは条件分岐ですが、こちらはユーザーが入力した値によって振る舞いを変えるコードを作ってみましょう。
今回は下記のようなコードを作っています。コマンドラインツール等でよくある、”y”か”n”を入力してEnterを押して答えるスタイルを想定しています。
set /P USER_INPUT=Are you hungry? [y/n] IF %USER_INPUT%==y ( echo You are hungry. ) else ( echo You are not hungry. )
これも保存してバッチファイルを実行してみてください。”y”か”n”を入力し、Enterを押して正しい答えが返ってくることを確認してみましょう。
2.繰り返し
では続いて繰り返しですが、FORコマンドを使います。FORの書き方で最も基本となる書き方を学んでいきます。
こちらもまずサンプルコードを動かしてみましょう。下記は、数値を1から5まで表示するサンプルです。
@echo off for /L %%i in (1,1,5) do ( echo %%i )
”in”の後のカッコ書きのところの書式は
(開始番号, ステップ, 終了番号)
となります。ステップにマイナスを設定すると減っていきます。
また、%%iというところが変数名となりますが、こちらは1文字のアルファベットしか付けられませんのでご注意下さい。(2文字以上にするとエラーになります)
出来たら実行してみましょう。1から5までカウントアップしていけば成功です。
FOR分には書き方がいくつかあり、その中でも実用的なものをもう1つ紹介します。まずはサンプルコードが下記になります。
@echo off echo File List: for %%f in (*.*) do ( echo %%f )
このコードを実行すると、カレントディレクトリのファイル、ディレクトリ名一覧を表示します。また、(*.*)のところを(*.txt)などに変更すると、特定の拡張子のみをリストアップすることもできます。
条件分岐と組み合わせて、特定のディレクトリから、対象のファイルのみを操作したいといったケースで役立ちますので活用ください。
レッスン4.コマンドライン引数
続いては、コマンドライン引数を学びます。コマンドライン引数は、バッチファイルが実行される際の引数のことです。これを使うと、バッチファイルのアイコン上にファイルをドラッグ&ドロップしたら、何らかの変換をして出すといったことが可能になります。
まずは、コマンドライン引数の動作を確認してみましょう。テストコードは以下のように作成してみましょう。
@echo off echo %0 echo %1 pause
%0や%1と書かれているものがコマンドライン引数です。今回はファイルをドラッグ&ドロップして結果を見る必要がありますので、最後にpauseを入れています。
準備ができたら、「test.bat」にファイルを何かドラッグ&ドロップしてみましょう。
上記のような実行結果になりました。これにより、%0という変数にはバッチファイル自身のパス、%1という変数にはドラッグ&ドロップしたファイルのパスが入っていることが分かります。
これを踏まえて、次のステップに進みましょう。ドラッグ&ドロップしたファイルの名前を変更してみます。コードは以下です。かなりシンプルなコードになっています。
@echo off copy %1 %~n1_test%~x1 pause
copyはファイルを複製するコマンドですが、そのあとに難解な文字列が並んでいますね。それぞれの部分を色分けして、その意味を下記に説明します。
以上を踏まえて、例えばimage.bmpをドラッグ&ドロップすると、_testという文字列が付与されimage_test.bmpとなります。実際に変わるかどうか試してみましょう。
フォルダ内を確認し、ファイル名の後ろに「_test」が付きましたでしょうか?前のレッスンのFOR文と組み合わせると、連番を付けて複製することも可能です。
レッスン5.アプリケーションの起動
続いて、アプリケーションの起動について学んでいきましょう。バッチファイルから、他のアプリケーションの起動ができます。コマンドライン対応されているアプリケーションだと、メインウィンドウが起動せずともバックグラウンドで作業が実行できるので、便利に使いこなすことができます。
1. startとcall
まず、バッチファイルからアプリケーションを開くには、大きく分けて2つの方法があります。下記に、メモ帳を開くコマンドを例に挙げて説明します。
start notepad.exe echo End of operation
startと書くと、メモ帳が開くと同時に「End of operation」という文字列が画面上に表示されます。
一方で、
call notepad.exe echo End of operation
callと書くと、メモ帳が閉じた後に「End of operation」という文字列が画面上に表示されます。
まとめると、
- startと書くと、呼び出したアプリケーションの終了を待たずに次のコマンドに進む
- callと書くと、呼び出したアプリケーションの終了を待って次のコマンドに進む
ということになります。実現したい内容によって使い分けるようにしましょう。
2. オプション付き起動
前項で説明したアプリケーションの起動ですが、オプションを付けて起動することもできます。使えるオプションはアプリケーションによって異なり、大抵はヘルプファイルを見ると書いてあります。
今回もメモ帳を例にしますが、先ほどのコマンドにオプションを付けて実行してみます。
start notepad.exe D:\test.txt
先ほどと違って、exeファイルの後ろにテキストファイルのパスが書かれています。これがオプションです。
これを実行すると、Dドライブ直下にあるtest.txtというファイルを直接開いてくれます。このようにオプションを起動時に指定することで、様々な自動化スクリプトに対応することができます。
3. 環境変数
2.でアプリケーションの起動を学んだ際に、メモ帳アプリケーション名を「notepad.exe」としていましたが、フルパスではなくexeファイルの名前だけを直接指定しています。何故パスを入れずに起動ができるのでしょうか?それは、環境変数にパスを指定しているからです。
環境変数はバッチファイル等でコマンド実行を容易にする仕組みです。バッチファイルで使いたいソフトがある場合、あらかじめexeファイルが入っているディレクトリをここに登録しておくと、exeファイル名だけで起動が可能になります。
Windows10ですとStartボタンを押した後に、キーボードで「環境変数」と入力すると下記のようなウィンドウが表示され、環境変数の編集ができます。
ユーザー環境変数と、システム環境変数という欄があります。「ユーザー環境変数」はログイン中のユーザーのみに有効な環境変数。一方で「システム環境変数」はそのPCを使う全てのユーザーに有効な環境変数です。
「Path」というところで編集を押すと、exeのディレクトリが指定できます。一般的に環境変数を編集するのはPythonやPerlといったスクリプト言語のプログラム実行をしたいとき、バッチファイルでGit/SVNのコマンドを使いたいときなどです。
手動で環境変数を追加しなくても、インストール時に環境変数登録を選択できるアプリケーションもありますので、バッチファイルで扱う場合には有効化を選択してください。
おわりに
今回は発展編ということで、バッチファイルで少し高度な操作を学びました。アプリケーションの起動を組み合わせると、より多彩な自動化が可能となります。また、他のスクリプト言語のファイルを実行させることも可能ですので、用途に応じて使い分けてください。
最後までお読みいただきありがとうございました。
No Comments