バッチファイル(コマンドプロンプト)でカレントディレクトリのパスを変数に入れる。

あんまり無いシチュエーションかもしれませんが、バッチファイルから起動するプログラムの引数にカレントディレクトリの絶対パスを与えてやる必要が生じ、いろいろ試した結果以下のようにできることが判明した。


for /F "delims==" %i in ('cd') do set cdir=%i 

for文の/Fオプションは基本的にはファイルを入力するためのものでそれはそれでいろいろ使えそうなんだけども、コマンド自体も指定可能(シングルクオーテーションで囲む)で、その結果を変数に入れられるようだ。この場合はcdを渡している。cdはディレクトリ移動だが、引数を与えなければカレントパスを返す。pwdみたいに。forなんで繰り返しだけれども、cdの結果は一個しかないので上記でよい感じ。さらにオプションでdelimsを与えているが、デフォルトではコマンドの結果をスペースで分割するっぽく、Windowsだと時々困るのでデリミタを’=’に変更している。


for /F "delims==" %i in ('cd') do set cdir=%i 
hoge.exe "%cdir\fuga.txt"

こんな感じで使えるわけです。forは他にも面白い使い方ができそう。

以上

2008-09-22 追記: (じゃくさんコメントより)
こんなめんどくさいことしなくても%CD%でガツン!ととれるようだ。
http://homepage1.nifty.com/jak/batch/

2008-09-24 追記:
なんでも%%でいけるのかと思ったけど、無理みたいだなあ。例えば日付を取りたいときとかは%date /T%ではだめで、forならいける。


for /F %i in ('date /T') do set d=%i

コスミー について

昔(?)はゲーム作ってました。 今もなんか作ろうとしています。
カテゴリー: 聞いて欲しい独り言 パーマリンク

バッチファイル(コマンドプロンプト)でカレントディレクトリのパスを変数に入れる。 への6件のフィードバック

  1. じゃく のコメント:

    カレントディレクトリの取得ですが、for文を使わなくても %CD% で取得できますよ。

    じゃく http://homepage1.nifty.com/jak/batch/

  2. コスミー のコメント:

    うおう。まじで!?
    まじだ。
    どうもありがとう。

  3. じゃく のコメント:

    またまたおじゃまします。

    日付をとりたいときは %DATE% という記述があります。
    ここら辺は特殊な環境変数でシステムが動的にセットするものです。
    set /? で表示されるヘルプの最後にかかれています。

    >なんでも%%でいけるのかと思ったけど、無理みたいだなあ。

    UNIX のシェルでいうところの実行結果の置き換えに当たる `date /T`に相当するものは for /F %i in (‘date /T’) do であってますので、for /F 覚えておいて損はないです。

  4. コスミー のコメント:

    なるほど~。普通にdateって打ったら対話的なことになるので試してませんでした。
    %TIME%ってのもあるんですね。
    コマンドの実行結果を入れてくれるのかと思ったのでちょっと誤解しました。

  5. ピンバック: 髮題ェ後〒繧「繝。繝ェ繧ォ繝ウ繝輔ャ繝医?繝シ繝ォ nfl elite 繝ヲ繝九ヵ繧ゥ繝シ繝

  6. FOWUJFKDCRWUUIX のコメント:

    Hello there, just became alert to your blog through Google, and found that it’s truly informative. I gonna watch out for brussels. I will be grateful if you continue this in future. Many people will be benefited from your writing. Cheers!

コメントを残す

メールアドレスが公開されることはありません。