5

我想获取从当前位置向上 2 个目录的文件夹的路径。

我正在执行以下操作:

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

当我运行上面的内容时,我打印了当前目录路径,但 NEW_PATH 不是。它只是说 ECHO_OFF。

从这个链接:批处理文件:相对路径错误,从当前目录向上一级我也尝试过

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

但仍然是同样的问题。

我怎样才能得到这个目录路径?

4

2 回答 2

6

对于每个文件夹,..指向其父文件夹,因此,从当前文件夹向上两级是..\... 现在,要将相对引用转换为绝对完整路径,我们需要获取指向文件/文件夹的引用。为此,我们可以将相对引用作为参数传递给子例程,或者我们可以使用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\"

%~dp0当前批处理文件的驱动器和路径在哪里(是对当前批处理文件%0的引用)并使用相同/相似的代码进行处理

于 2013-11-06T10:56:05.260 回答
4

我今天遇到了同样的问题,但有点不同,我不得不从另一个文件夹中调用一个蝙蝠,这就是我解决它的方法:

@echo off    

rem tree

rem  <driver>
rem    |
rem   root
rem    |-- A
rem        |-- B
rem            |-- C
rem                |-- test.bat
rem    |-- D
rem        |-- E
rem            |-- testD.bat
rem        |-- testSibling.bat 


rem  take current dir
set "crt_dir=%~dp0"

rem go 3 levels up 
for %%I in ("%crt_dir%\..\..\..") do set "root=%%~fI"

set "sibling=%root%\D

set "insideSibling=%sibling%\E

echo +----------------------------------------------+
echo + current dir   -- "%crt_dir%"
echo + root dir      -- "%root%"
echo + siblling      -- "%sibling%"
echo + insideSibling -- "%insideSibling%"
echo +----------------------------------------------+

call %sibling%\siblingTest.bat
call %insideSibling%\testD.bat

兄弟测试.bat:

echo    +---------------------------------------+
echo    + inside sibling folder "%~dp0"
echo    +---------------------------------------+

测试D.bat

echo    +---------------------------------------+
echo    + inside D folder "%~dp0"
echo    +---------------------------------------+

输出是这样的:

在此处输入图像描述

于 2017-04-04T13:09:35.470 回答