2016-12-08 11 views
2

を2つの親レベルアップを取得:\ Tempに\ A \ B \ C \ mybatch.batの私はC言語でbatファイル持っているバッチファイルで

c:\Temp 
    | 
    |---- A 
     | 
     |----B 
     | | 
     | |----C 
     | 
     |----D 
      | 
      |----E 

私はbatファイルを実行すると、私が取得したいと思いますがその中から "C:\ Temp \ A \ D \ E"というパスを変数に追加します。

どうすればいいですか?それを行うだろう

+1

使用しているオペレーティングシステムは何ですか? –

答えて

2

set MYVAR=%~pd0..\..\D\E 

%~pd0は、現在実行中のスクリプトのディレクトリです。 \..\..\D\Eを付けると、あなたは行き​​たいです。

はしかし、それは親ディレクトリのパスがあるので、あなたが期待している美しいパスではありませんで、それ

フルパス解像度で

代替ソリューション:

@echo off 

set MYVAR=%~pd0..\..\D\E 
pushd %MYVAR% 
if %ERRORLEVEL%==1 goto end 
set MYVAR=%CD% 
popd 
:end 
echo %MYVAR% 

(実際に新しく建設されたパスにディレクトリを変更システムがそれを解決させ、変数を現在のディレクトリに設定してから、前のディレクトリにポップバックさせます)。

ディレクトリを入力できない場合(許可なし/存在しない場合)、\..\部分を含む醜いパスにフォールバックがあります。

2

本当に簡単にFORコマンドを使用できます。トリックを行う必要があります

@echo off 
for %%G in ("%~dp0\..\..") do set grandparent=%%~dpnxG\D\E 
echo %grandparent% 
+3

+1ですが、結果を祖父母と呼ぶのは好きではありません。 '%% G'は祖父母を含んでいます。あなたの最終変数にはいとこが含まれています。 – dbenham

+0

@dbenham、私はその論理を議論することはできません。 – Squashman

0
pushd ..\..\d\e && set thepath=%CD% && popd 

関連する問題