Как я могу преобразовать относительный путь в полный путь в пакетном файле DOS? - PullRequest
6 голосов
/ 06 июля 2011

Я пишу командный файл, который выполняет ряд операций в папке, которая указана относительно первого аргумента, переданного в командный файл. В пакетном файле я хотел бы передать пользователю папку, в которой я работаю. Однако каждый раз, когда я повторяю путь, он содержит .... \, который я использовал, чтобы определить, где разместить свою папку. Например.

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

Таким образом, если я запусту свой пакетный файл с параметром \FolderA, вывод команды echo будет FolderA\..\Temp вместо \Temp, как я и ожидал.

1 Ответ

8 голосов
/ 06 июля 2011
SET "TempDir=%~1\..\Temp"
CALL :normalise "%TempDir%"
ECHO %TempDir%
…

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

…

Подпрограмма :normalise использует выражение %~f1, чтобы преобразовать относительный путь в полный и сохранить его обратно в TempDir.


UPDATE

В качестве альтернативы, вы можете использовать цикл FOR, например:

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