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