目次
その他の関連しそうな記事
ダブルクリックで実行
バッチファイルの最も簡単な実行方法がファイルを「ダブルクリック」することです。通常のファイルは、すなわちバッチファイル以外のファイルでは、ダブルクリックは「そのファイルを開く」ことを意味しますが、バッチファイルの場合は「ファイルの実行」を意味します。
簡単なプログラムで確認してみましょう。以下のように記述した「execute.bat」ファイルを作成します。
1 2 3 4 5 |
@echo off echo 実行されました。 pause |
5行目の「pause」は一時停止コマンドです。詳しくは、「pause -コマンド別解説-」を参照して下さい。コマンドプロンプト画面はバッチファイルのプログラム終了後すぐに閉じてしまうため、ここでは確認しやすいようにファイル内の処理を一時停止するために記述しています。
このバッチファイルをダブルクリックすると、以下のように表示され、実行できたことが確認できます。
先に述べたように、これが最も簡単なバッチファイルの実行方法ですが、デメリットもあります。
それは「引数」が扱えないということです。引数とは、バッチプログラム内の「%1」などに任意の文字列を引き渡し、ユーザーの情報をバッチファイルに反映させるためのものです。詳しくは「%1,%2…%X(引数とプレースフォルダー) -コマンド別解説-」をご覧下さい。
「引数」を指定するためには、次節以降で紹介する「コマンドプロンプトで実行」、もしくは「ファイルをバッチファイルにドラッグ&ドロップで引数を渡して実行」を行う必要があります。
コマンドプロンプトで実行
最も一般的な実行方法が、コマンドプロンプト上でバッチファイルを実行する方法でしょう。これは、コマンドプロンプトを開いてバッチファイル名を入力し、「Enter」を押すことで実行します。前節で作成したバッチファイル「execute.bat」をコマンドプロンプト上から実行したときの画面を以下に示しています。
コマンドプロンプト上での実行は、コマンドプロンプトを開く動作とバッチファイル名を入力する動作が入るため、ダブルクリックによる実行に比べると手間ですが、プログラムのエラーが生じた場合にコマンドプロンプト内に表示されたエラー情報などを確認できるため、新しく作成したプログラムは一度この方法で実行して動作をチェックするのが一般的です。
また、ダブルクリック実行では扱えなかった「引数」についても扱うことができます。バッチファイルに「file.txt」というファイル名を引数として渡し、ファイルのコピー「copy_file.txt」を作成するプログラムで確認しましょう。「copy.bat」を作って、その内容は以下のように記述します。
1 2 3 4 5 |
@echo off copy %1 copy_%1 pause |
コピーしたいファイル名を引数として与え実行します。
1 |
copy.bat file.txt |
すると「copy_file.txt」という「file.txt」ファイルがコピーされたファイルができます。
まとめます。コマンドプロンプトを開いて実行するときは、
- 新規に作ったプログラムの動作確認
- 「引数」を使用したいとき
に利用すると便利な実行方法となっています。
ファイルをバッチファイルにドラッグ&ドロップして実行
コマンドプロンプトを開かずとも「引数」を使用できるバッチファイルの実行方法が、「ファイルをバッチファイルにドラッグ&ドロップして実行する」方法です。これは、引数としてプログラムに渡したいファイルをバッチファイル上にドラッグ&ドロップします。すると、勝手にバッチファイルが実行され、プログラム内の「%1」にはそのファイルの「絶対パス」が引き渡されます。
次のような簡単なバッチファイル「DD_exe.bat」で引き渡された「%1」の中身を確認します。
1 2 3 4 5 6 7 |
@echo off echo ドラッグ&ドロップされたファイルの絶対パスは、 echo %1 echo です。 pause |
これを実行すると、以下のような結果が得られます。
「%1」には、2行目の「C:\…\file.txt」のように「file.txt」ファイルの絶対パスが入っていることが分かります。
ドラッグ&ドロップで引数を渡して実行するときの注意点
では、この実行方法は前節で作成した「copy.bat」に利用可能でしょうか?
1 2 3 4 5 |
@echo off copy %1 copy_%1 pause |
試しに、「file.txt」ファイルをバッチファイル「copy.bat」にドラッグ&ドロップしてみると、
のようなエラーが発生しました。
これは「%1」には絶対パス(C:\…\file.txt)が入っていることが原因です。「copy %1 copy_%1」を実行するとき、「%1」には「C:\…\file.txt」が入っているため、
1 |
copy C:\…\file.txt copy_C:\…\file.txt |
を実行しようとしているのです。コピー元は問題なさそうですが、コピー先のドライブ名が「copy_C:」となってしまい、これでエラーが生じているのです。
これを回避する方法は「%1」からファイル名のみを抜き出して使用することです。
1 2 3 4 5 |
@echo off copy %~xn1 copy_%~xn1 pause |
3行目の「copy」コマンドに指定する「%1」を「%~xn1」とファイル名のみを抜き出して使用しています。文字列の抜き出しについては、「パス名の文字列を自在に切り取る -やりたいこと検索-」に詳しく記載しているのでそちらを参照下さい。