2017-09-22 12 views
0

私はバッチファイルを書き込んでいます。ルートパスからいくつかのファイルをcd ..ルートに移動したいと思います。バッチファイルを一歩元に戻す

%〜dp0を使用してルートパスを検索します。

ルートパスから一歩前に戻す最善の方法はありますか?あなたは、ほとんど存在し

どうもありがとう

答えて

0

、ちょうどこれはSO https://stackoverflow.com/a/15568171/30447に答える見る、あなたはそれが完全に解決したい場合は、説明のためにこのトリック

@echo off 
call :resolve "%~dp0.." 
goto :eof 

:resolve 
echo %~f1 
goto :eof 

を使用%~dp0..

かを使用

1

%~dp0現在のバッチファイルのtディレクトリ(末尾に\を含む)、%~dp0..はバッチファイルのgrand-parentディレクトリを指しています。

あなたは、パスを解決するためにfor loopとその変数の参照(%%I)の~f modifierを使用することができます。

for %%I in ("%~dp0..") do echo/%%~fI 
+0

別にタイプミスから、あなたの答えは、より多くの質問を私に残します。 '%〜dp0.'は親ディレクトリを指し、'%〜dp0 ... 'は偉大な祖父母などを指しています。'%〜dp0'がドライブ文字とパスに展開されると、なぜ使用する必要がありますか? '〜f'修飾子。 '"%〜dp0 .. "'は括弧の評価中には展開されないので、完全に展開されたドライブとパスを変数 '" %% I "'として文字列に渡します。 '〜f'で別の展開が必要なのはなぜですか? – Compo

+0

@Compo、 '%〜dp0..'が自動的に解決されるのはなぜですか? '%〜dp0'は、' ..'のように前置しても、後ろに '\'をつけても、現在のバッチファイルの親ディレクトリにドライブ( 'd')とパス(' p') '.'は同じディレクトリを指しているので(' anydir \ middir \ subdir'は 'anydir \ middir \ subdir \ .'と同じです)、' ..'は親ディレクトリを指しています( 'anydir \ middir \ subdir \ .. 'は' anydir'と同じです); 'anydir \ middir \ subdir \ .. \ ..'を指すには 'anydir'を実行する必要があります)... – aschipfl

+0

@Compo、そして"かっこの評価 "とはどういう意味ですか? ?つまり、 'のために' '自動的に 'の後の部分を解決するということですか?いいえ、違います; 'anydir \ middir \ subdir \ .. \。\ .. \ file.ext'のようなパスを決して決して解決しない場合、最後のパス要素に現れるときにのみワイルドカード(' * '、'? ')最後の '\'の後ろに);パスを解決するために '〜f'修飾子を使う必要があります。ワイルドカードが含まれていない限り、 'for'はパスが本当に存在するかどうかをチェックするためにファイルシステムにアクセスしません。 – aschipfl