- 締切済み
コマンドプロンプトで相対パスの取得
コマンドプロンプトにて、絶対パスから相対パスを取得する方法はございますでしょうか? hoge ├ hoge2.txt └ hoge3.txt という階層で、 for %%A in (hoge\*.txt) do ( echo %%A ) と for で回すと、%%Aには絶対パスが入ります。 この%%Aに相対パス(hoge\hoge2.txt)を格納する方法、もしくは%%Aから相対パスを抜き出す方法が知りたいのです。 VBなど別プログラムを起動させずに、あくまでもコマンドプロンプト上での方法がありましたら、どうかご教授下さいませ。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- rub_oil
- ベストアンサー率14% (3/21)
当方、環境はXpSP3です。 カレントをC:\に移動し、コマンドライン上より実行しました。 C:\>for %a in (wrk\*.csv) do echo %a コマンドの細部が違う事などは了解してくださいね。 で、結果が wrk\data3.csv で、XpSP3でも相対パスしか入りませんでした。
- Tacosan
- ベストアンサー率23% (3656/15482)
たぶんスクリプトだと思うので作って実行してみましたが, 手元の 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 しか表示されませんでした.
お礼
N0.1の方へのお礼にも書きましたが、/r パラメータを付けていたのが、絶対パスとなった原因でした。 詳しい検証を誠にありがとうございます。 お陰様でミスの原因に気付けました。 ご回答、ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
あれ? それで絶対パスが入りますか? 手元の Vista では相対パスになっているんですけど....
お礼
for のパラメータに /r を付けていたのが原因でした。 /r で探索すると絶対パスになってしまうのですね。 パラメータを外せば、ちゃんと相対パスになりました。 OSの違いは関係ありませんでしたね。大変失礼致しました。 ご回答頂き、ありがとうございます。
補足
私の環境は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 となるのでしょうか?
お礼
No.1の方へのお礼にも書きましたが、/r パラメータを付けていたのが、絶対パスとなった原因でした。 同じ環境での実証を誠にありがとうございます。 皆さんが挙って相対パスと指摘下さったお陰で、こちらのミスに気付けました。 ご回答、ありがとうございました。