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

7

我正在编写一个批处理文件,它在指定的文件夹中执行多个操作,该文件夹是相对于传递给批处理文件的第一个参数指定的。 在批处理文件中,我想向用户回显我正在工作的文件夹。 但是,每次我回显路径时,它都包含了我用来确定放置文件夹位置的"....\"。例如:

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

所以,如果我使用参数\FolderA运行批处理文件,则回显语句的输出为FolderA\..\Temp而不是我期望的\Temp

1
请参阅...https://dev59.com/1nI-5IYBdhLWcg3w18V3 - SteveC
如果你使用的是Powershell,这是一个不错的解决方案:https://dev59.com/7nRB5IYBdhLWcg3w1Kn0 - Andrew Koster
如果您尚未使用PowerShell,请考虑使用PowerShell使上述解决方案对您可用。 - Andrew Koster
1个回答

11
SET "TempDir=%~1\..\Temp"
CALL :normalise "%TempDir%"
ECHO %TempDir%
…

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

…

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


更新

或者,您可以像这样使用FOR循环:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接