• 締切済み

コマンドプロンプトで相対パスの取得

コマンドプロンプトにて、絶対パスから相対パスを取得する方法はございますでしょうか? hoge  ├ hoge2.txt  └ hoge3.txt という階層で、 for %%A in (hoge\*.txt) do ( echo %%A ) と for で回すと、%%Aには絶対パスが入ります。 この%%Aに相対パス(hoge\hoge2.txt)を格納する方法、もしくは%%Aから相対パスを抜き出す方法が知りたいのです。 VBなど別プログラムを起動させずに、あくまでもコマンドプロンプト上での方法がありましたら、どうかご教授下さいませ。

みんなの回答

  • rub_oil
  • ベストアンサー率14% (3/21)
回答No.3

当方、環境はXpSP3です。 カレントをC:\に移動し、コマンドライン上より実行しました。 C:\>for %a in (wrk\*.csv) do echo %a コマンドの細部が違う事などは了解してくださいね。 で、結果が wrk\data3.csv で、XpSP3でも相対パスしか入りませんでした。

usio199643
質問者

お礼

No.1の方へのお礼にも書きましたが、/r パラメータを付けていたのが、絶対パスとなった原因でした。 同じ環境での実証を誠にありがとうございます。 皆さんが挙って相対パスと指摘下さったお陰で、こちらのミスに気付けました。 ご回答、ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

たぶんスクリプトだと思うので作って実行してみましたが, 手元の Vista Business でテストする限りでは相対パスになってますねぇ. cドライブではテストできなかったので dドライブでやってますが, d:\>dir /s hoge2.txt で d:\Test1\Test2\hoge\hoge2.txt だけが出る状況で d:\ に cd Test1\Test2 for %%A in (hoge\*.txt) do (echo %%A) という内容のスクリプトを作って実行しましたが, hoge\hoge2.txt しか表示されませんでした.

usio199643
質問者

お礼

N0.1の方へのお礼にも書きましたが、/r パラメータを付けていたのが、絶対パスとなった原因でした。 詳しい検証を誠にありがとうございます。 お陰様でミスの原因に気付けました。 ご回答、ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

あれ? それで絶対パスが入りますか? 手元の Vista では相対パスになっているんですけど....

usio199643
質問者

お礼

for のパラメータに /r を付けていたのが原因でした。 /r で探索すると絶対パスになってしまうのですね。 パラメータを外せば、ちゃんと相対パスになりました。 OSの違いは関係ありませんでしたね。大変失礼致しました。 ご回答頂き、ありがとうございます。

usio199643
質問者

補足

私の環境はXPです。 VistaとXPの違いでしょうか・・・ 例えば、  C:\Test1\Test2\hoge\hoge2.txt という階層で、  cd C:\Test1\Test2  for %%A in (hoge\*.txt) do ( echo %%A ) と走らせると、  C:\Test1\Test2\hoge\hoge2.txt と表示されます。Vistaでは  hoge\hoge2.txt となるのでしょうか?

関連するQ&A