batファイルから同じフォルダ内のプログラムとかを start コマンドでもやらせたい とか | ある意味メモ帳がわり

ある意味メモ帳がわり

ブログの説明を入力します。

callコマンドでやれていたことが startコマンドで出来ない
※start コマンドで 相対パスが指定できないことへの対処


通常 バッチファイルなどで他のプログラムを呼び出すには
call コマンドを使うが、何らか理由があって
※つまり 呼び出し先で処理がストップ(ポップアップするとか)するとバッチはそこでストップしてしまう
 コレの対応というのがほとんどの理由だと思うが


他のプロセスで処理させるには start コマンドを使う
※つまり呼び出し先で処理がストップしても、呼び出し元はお構いなしで先に進む

しかし 「他のプロセスで処理させる」訳だから
呼び出し先はフルパスで答えてやらないとダメっぽい


ここで

起動させる対象のプログラム(fuga.exe)
と それを呼び出すバッチ(hoge.cmd)を
同じフォルダに入れておいて

--------hoge.cmd-------

call fuga.exe "piyo" -①


------------------------


などとやっていて

①で処理がストップすると バッチファイルはそこでストップする

ならば、「startにやらせよう」とすると
startにはフルパスを入れてやらないとダメ
あるいは
start /d に作業ディレクトリを指定してやらんとダメ

てなわけで
「fuga.exe と hoge.cmd をセットで どこのディレクトリに持って行っても
(手直しなしで)きちんと動くようにしたい。」
というのはできないか? という相談であるが。



結論から言うと
上記①は次のように書き換えればよろしい
start /d %~dp0 fuga.exe "piyo"



さて、上記の start /d に作業ディレクトリを指定する部分で
呼び出し元(つまり自分自身)の存在するディレクトリを指定してやれば
似たような作業になる。
※手直しなしでっていう部分ですな

んで 作業ディレクトリに自分自身のパスを与えてやれば良い(いつでも)


バッチファイル内では
変数 %0 に自分自身のフルパスが格納されている。
また、コレにはいくつかオプションがあって

%~d0 ドライブ名を取得
%~p0 パス名を取得(作業ディレクトリのみ ドライブ名なし)
%~n0 ファイル名のみ取得(拡張子なし ←これ意味あるのかな?)
%~x0 ファイルの拡張子を取得(フルパスの最後の.以降)
%~s0 MS-DOSの8.3形式でフルパスを取得

これらは複数組み合わせが可能
従って ドライブ名+パス は%~d0%~p0 でも良いが %~dp0 でok



これで困っている人はたくさんいるはずなんだろうが、その人はこれの解決策を書いているところに
辿りつけるのだろうか