如何将相对路径转换为DOS批处理文件中的完全限定路径?

How can I convert a relative path to a fully qualified path in a DOS batch file?

我正在编写一个批处理文件,它在一个相对于传递给批处理文件的第一个参数指定的文件夹中执行许多操作。在批处理文件中,我想将正在使用的文件夹回送给用户。但是,每次我回送路径时,它都包含用于确定文件夹放置位置的….。例如。

1
2
set TempDir=%1\..\Temp
echo %TempDir%

因此,如果我使用参数\FolderA运行批处理文件,echo语句的输出是FolderA\..\Temp,而不是我所期望的\Temp


1
2
3
4
5
6
7
8
9
10
SET"TempDir=%~1\..\Temp"
CALL :normalise"%TempDir%"
ECHO %TempDir%


:normalise
SET"TempDir=%~f1"
GOTO :EOF

:normalise子例程使用%~f1表达式将相对路径转换为完整路径,并将其存储回TempDir中。

更新

或者,可以使用for循环,如下所示:

1
2
3
SET"TempDir=%~1\..\Temp"
FOR /F"delims=" %%F IN ("%TempDir%") DO SET"TempDir=%%~fF"
ECHO %TempDir%