5

現在の場所から2ディレクトリ上のフォルダのパスを取得したい。

私は次のことをしています:

echo %CD%
set NEW_PATH = ..\..\bin\
echo %PATH%

上記を実行すると、現在のディレクトリ パスが出力されますが、NEW_PATH は表示されません。ECHO_OFF とだけ表示されます。

このリンクから:Batch File: Error in relative path 、現在のディレクトリから1レベル上私も試しました

set NEW_PATH = %~dp0..\..\bin\

それでも同じ問題。

このディレクトリ パスを取得するにはどうすればよいですか?

4

2 に答える 2

6

は各フォルダの..親フォルダを指すため、現在のフォルダから 2 つ上のレベルは..\..です。ここで、相対参照を絶対フル パスに変換するには、指定されたファイル/フォルダーへの参照を取得する必要があります。forそれを行うには、相対参照を引数としてサブルーチンに渡すか、コマンドを使用できます

@echo off

    setlocal enableextensions disabledelayedexpansion

    set "newDir=..\..\bin"

    rem With a subroutine   
    call :resolve "%newDir%" resolvedDir
    echo %resolvedDir%

    rem With a for - retrieve the full path of the file/folder being
    rem              referenced by the for replaceable parameter
    for %%f in ("%newDir%") do echo %%~ff

    endlocal
    goto :EOF

:resolve file/folder returnVarName
    rem Set the second argument (variable name) 
    rem to the full path to the first argument (file/folder)
    set "%~2=%~f1"
    goto :EOF

編集

送信されたコードは、バッチ ファイル ディレクトリではなく、現在のディレクトリの相対パスを取得します。バッチファイル相対が必要な場合は、試してください

set "newDir=%~dp0\..\..\bin\"

where%~dp0は現在のバッチ ファイルのドライブとパス (%0は現在のバッチ ファイルへの参照) であり、同じ/類似のコードで処理を進めます

于 2013-11-06T10:56:05.260 に答える