通常 バッチファイルなどで他のプログラムを呼び出すには
call
コマンドを使う
例としては
起動させる対象のプログラムfuga.exe
と、それを呼び出すバッチhoge.cmd
を同じフォルダに入れておき
hoge.cmd
call fuga.exe
などとやっていて、処理がストップすると、バッチファイルはそこでストップする。
ならば、「start
にやらせよう」とすると、「start
にはフルパスを入れてやらないとダメ」あるいは 「start /d
に作業ディレクトリを指定してやらんとダメ」
てなわけで「fuga.exe
と hoge.cmd
をセットで どこのディレクトリに持って行っても
(手直しなしで)きちんと動くように」というのはできないか? という相談であるが。
結論から言うとhoge.cmd
は次のように書き換えればよろしい
hoge.cmd
start /d %~dp0 fuga.exe
さて、上記の start /d に作業ディレクトリを指定する部分で、呼び出し元(つまり自分自身)の存在するディレクトリを指定してやれば、似たような作業になる。
※手直しなしでっていう部分ですな
んで 作業ディレクトリに自分自身のパスを与えてやれば良い(いつでも)
バッチファイル内では、変数%0
に自分自身のフルパスが格納されている。
また、コレにはいくつかオプションがあって
変数 | 内容 |
---|---|
%~d0 | ドライブ名を取得 |
%~p0 | パス名を取得(作業ディレクトリのみ ドライブ名なし) |
%~n0 | ファイル名のみ取得(拡張子なし ←これ意味あるのかな?) |
%~x0 | ファイルの拡張子を取得(フルパスの最後の.以降) |
%~s0 | MS-DOSの8.3形式でフルパスを取得 |
これらは複数組み合わせが可能 | |
従ってドライブ名+パス は%~d0%~p0 でも良いが%~dp0 でok
|
|
別ブログに掲載していた記事をQiitaに掲載 |