WindowsでEclipseを使っていると、バッチファイルをEclipseから実行したい場合があります。 いろいろ調べた結果、今は以下のどちらかの方法を使っています。
ダブルクリックで実行
-
バッチファイルの作成
バッチファイルの先頭に以下を追加すると、パッケージ・エクスプローから バッチファイルをダブルクリックで実行できるようになります。
%~d0 cd %~p0
"%~d0"は、%0をドライブ文字だけに展開し、実行されているファイルが置かれている場所のドライブ文字になります。 もしバッチファイルのパスが、"D:\workspace\test_project\tools\batch\test.bat"なら、以下の実行と同じです。
D:\eclipse>D:
”%~p0”は、”%0”をパスだけに展開し、実行されているバッチファイルが置かれているディレクトリになります。 そのため、CDコマンドで指定すると、実行されたバッチファイルのディレクトリへの移動と同じになります。
D:\eclipse>CD \workspace\test_project\tools\batch\注. バッチファイルでは、”%0”は実行されているバッチファイルのフルパスになります。 また、”%~p0”は、”%0”にオプション構文の 「~」、「p」が付いたものになります。。
%~d0 cd %~p0 set PATH=%PATH%;C:\Program Files\PostgreSQL\8.4\bin; set PGPASSWORD=password dropdb -U postgres testdb createdb -U postgres -E UTF-8 testdb psql -U postgres testdb < testdb.ddl psql -U postgres testdb < testdb_test_data.sql pause
実行できない場合
ただし、実行できない場合もあります。その場合は以下を試します。
[アプリケーションから開く]が「デフォルトエディタ」または「システムエディタ」でない場合は、「デフォルトエディタ」を選択してみてください。 ダブルクリックで実行できるようになるはずです。
注意. Eclipse 4.3.1 Kepler 英語版で確認すると、ファイルを選択した状態の右クリックから[アプリケーションから開く]で[デフォルトエディタ]を選ぶと、 コマンドプロンプトが開いてバッチファイルが実行されますが、再度確認すると[デフォルトエディタ]でなく[システムエディタ]になってしまいます。

バッチのオプション構文について
バッチでの "%~d0"、"%~p0"や、それ以外のオプション構文については、callのヘルプに説明があります。 ヘルプによれば、%~d0"は、「%0 をドライブ文字だけに展開したもの」になります。 以下は、Windows7のコマンドプロンプトの結果です。
C:\>call /?
バッチ プログラムを別のバッチ プログラムから呼び出します。
CALL [ドライブ:][パス]ファイル名 [バッチパラメーター]
バッチパラメーター バッチ プログラムで必要なコマンド ライン情報を指定します
。
コマンド拡張機能を有効にすると、CALL は次のように変更されます:
CALL コマンドは、CALL のターゲットとしてラベルを受け付けるようになります。
構文は、次のとおりです:
CALL :ラベル 引数
指定された引数で新しいバッチ ファイル コンテキストが作成され、指定
されたラベルの次の文に制御が渡されます。バッチ スクリプト ファイルの
最後に 2 回到達することによって、2 回 "終了" する必要があります。
1 回目に最後に到達したときには、制御は CALL 文の次の行に返されます。
2 回目に、バッチ スクリプトが終了します。バッチ スクリプトから "戻る"
ための GOTO :EOF 拡張機能の説明については、GOTO /? と入力してください。
また、バッチ スクリプトの引数参照 (%0、%1 など) の展開は、次のように
変更されました:
%* バッチ スクリプト内では、すべての引数 (%1、%2、%3、%4、
%5 など) を参照します。
バッチ パラメーター (%n) の置換は拡張されました。次のオプション構文
を使うことができます:
%~1 - すべての引用句 (") を削除して、%1 を展開します。
%~f1 - %1 を完全修飾パス名に展開します。
%~d1 - %1 をドライブ文字だけに展開します。
%~p1 - %1 をパスだけに展開します。
%~n1 - %1 をファイル名だけに展開します。
%~x1 - %1 をファイル拡張子だけに展開します。
%~s1 - 展開されたパスは、短い名前だけを含みます。
%~a1 - %1 をファイル属性に展開します。
%~t1 - %1 をファイルの日付/時刻に展開します。
%~z1 - %1 をファイルのサイズに展開します。
%~$PATH:1 - PATH 環境変数に指定されているディレクトリを検索し、
最初に見つかった完全修飾名に %1 を展開します。
環境変数名が定義されていない場合、または
検索してもファイルが見つからなかった場合は、
この修飾子を指定すると空の文字列に展開されます。
修飾子を組み合わせて、複合結果を得ることもできます:
%~dp1 - %1 をドライブ文字とパスだけに展開します。
%~nx1 - %1 をファイル名と拡張子だけに展開します。
%~dp$PATH:1 - PATH 環境変数に指定されているディレクトリを
検索して %1 を探し、最初に見つかったファイル
のドライブ文字とパスだけに展開します。
%~ftza1 - %1 を DIR の出力行のように展開します。
上の例の %1 と PATH は、他の有効な値で置き換えることができ
ます。%~ 構文は有効な引数の数によって区切られます。%~ 修飾子
は %* と同時には使用できません。
Antで実行
-
build.xmlの作成
Eclipseで以下のようなXMLファイルを作成し、名前をbuild.xmlとします。
<?xml version="1.0" encoding="UTF-8"?>
<project name="project" default="default">
<description>test batch file</description>
<target name="default" depends="depends" description="description">
</target>
<target name="depends">
<exec executable="cmd">
<arg value="/c" />
<arg value="db_init.bat" />
</exec>
</target>
</project>
この中に<exec executable="cmd">とありますが、これはAntのexecタスクです。
execタスクは外部プログラムを実行できますので、これでコマンドプロンプト(cmd.exe)の引数にバッチファイルを指定して実行します。
このサンプルで実行しているコマンドは、以下と同じになります。
cmd /c db_init.bat
実行方法
Eclipseが、このファイルをAntビルドファイルと認識した場合、このファイルにはアリのアイコンが表示されているはずです。 その場合、マウスでbuild.xmlを選択して、右クリックから[実行]→[Ant ビルド]を選択すれば、バッチファイルが実行されます。
