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