我想获取从当前位置向上 2 个目录的文件夹的路径。
我正在执行以下操作:
echo %CD%
set NEW_PATH = ..\..\bin\
echo %PATH%
当我运行上面的内容时,我打印了当前目录路径,但 NEW_PATH 不是。它只是说 ECHO_OFF。
从这个链接:批处理文件:相对路径错误,从当前目录向上一级我也尝试过
set NEW_PATH = %~dp0..\..\bin\
但仍然是同样的问题。
我怎样才能得到这个目录路径?
我想获取从当前位置向上 2 个目录的文件夹的路径。
我正在执行以下操作:
echo %CD%
set NEW_PATH = ..\..\bin\
echo %PATH%
当我运行上面的内容时,我打印了当前目录路径,但 NEW_PATH 不是。它只是说 ECHO_OFF。
从这个链接:批处理文件:相对路径错误,从当前目录向上一级我也尝试过
set NEW_PATH = %~dp0..\..\bin\
但仍然是同样的问题。
我怎样才能得到这个目录路径?
对于每个文件夹,..
指向其父文件夹,因此,从当前文件夹向上两级是..\..
. 现在,要将相对引用转换为绝对完整路径,我们需要获取指向文件/文件夹的引用。为此,我们可以将相对引用作为参数传递给子例程,或者我们可以使用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
的引用)并使用相同/相似的代码进行处理
我今天遇到了同样的问题,但有点不同,我不得不从另一个文件夹中调用一个蝙蝠,这就是我解决它的方法:
@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 +---------------------------------------+
输出是这样的: