LoginSignup
1
1

More than 5 years have passed since last update.

startコマンドで相対パスが指定できない対処

Last updated at Posted at 2017-08-06

通常 バッチファイルなどで他のプログラムを呼び出すには
callコマンドを使う

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

hoge.cmd
call fuga.exe

などとやっていて、処理がストップすると、バッチファイルはそこでストップする。
ならば、「startにやらせよう」とすると、startにはフルパスを入れてやらないとダメ」あるいは start /dに作業ディレクトリを指定してやらんとダメ」
てなわけでfuga.exehoge.cmd をセットで どこのディレクトリに持って行っても
(手直しなしで)きちんと動くように」
というのはできないか? という相談であるが。

結論から言うとhoge.cmdは次のように書き換えればよろしい

hoge.cmd
start /d %~dp0 fuga.exe 

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

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

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

これらは複数組み合わせが可能
従ってドライブ名+パス%~d0%~p0でも良いが%~dp0ok
別ブログに掲載していた記事をQiitaに掲載

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1