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

Batch file 如何将DOS批处理文件中的相对路径转换为完全限定路径?,batch-file,dos,relative-path,Batch File,Dos,Relative Path,我正在编写一个批处理文件,该批处理文件在相对于批处理文件中传递的第一个参数指定的文件夹中执行许多操作。在批处理文件中,我希望向用户回显我正在处理的文件夹。但是,每次我回显路径时,它都包含我用来确定放置文件夹的位置的…\。比如说 set TempDir=%1\..\Temp echo %TempDir% 因此,如果我使用参数\FolderA运行批处理文件,echo语句的输出将是FolderA\..\Temp,而不是我预期的\Temp SET "TempDir=%~1\..\Temp" CALL

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

set TempDir=%1\..\Temp
echo %TempDir%
因此,如果我使用参数
\FolderA
运行批处理文件,echo语句的输出将是
FolderA\..\Temp
,而不是我预期的
\Temp

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%

另见。。。如果你正在使用PosithS壳,这是一个很好的解决方案:如果你不使用PuthS壳,考虑使用PosithSead来让上面的解决方案对你可用。