Разрешить абсолютный путь из относительного пути и / или имени файла - PullRequest
144 голосов
/ 29 октября 2009

Есть ли способ в пакетном скрипте Windows вернуть абсолютный путь из значения, содержащего имя файла и / или относительный путь?

Дано:

"..\"
"..\somefile.txt"

Мне нужен абсолютный путь относительно командного файла.

Пример:

  • "somefile.txt" находится в "C: \ Foo \"
  • "test.bat" находится в "C: \ Foo \ Bar".
  • Пользователь открывает окно команд в «C: \ Foo» и вызывает Bar\test.bat ..\somefile.txt
  • В пакетном файле "C: \ Foo \ somefile.txt" будет получен из %1

Ответы [ 14 ]

0 голосов
/ 24 сентября 2015
SET CD=%~DP0

SET REL_PATH=%CD%..\..\build\

call :ABSOLUTE_PATH    ABS_PATH   %REL_PATH%

ECHO %REL_PATH%

ECHO %ABS_PATH%

pause

exit /b

:ABSOLUTE_PATH

SET %1=%~f2

exit /b
0 голосов
/ 03 августа 2015

Файлы Показать все остальные ответы

Директории

С .. является вашим относительным путем и предполагается, что вы находитесь в D:\Projects\EditorProject:

cd .. & cd & cd EditorProject (относительный путь)

возвращает абсолютный путь, например

D:\Projects

0 голосов
/ 15 ноября 2013
Решение

stijn работает с подпапками в C:\Program Files (86)\,

@echo off
set projectDirMc=test.txt

for /f "delims=" %%a in ('powershell -Command "[System.IO.Path]::GetFullPath( '%projectDirMc%' )"') do @set resolvedPath=%%a

echo full path:    %resolvedPath%
0 голосов
/ 07 июля 2013

PowerShell довольно распространен в наши дни, поэтому я часто использую его как быстрый способ вызова C #, поскольку в нем есть функции практически для всего:

@echo off
set pathToResolve=%~dp0\..\SomeFile.txt
for /f "delims=" %%a in ('powershell -Command "[System.IO.Path]::GetFullPath( '%projectDirMc%' )"') do @set resolvedPath=%%a

echo Resolved path: %resolvedPath%

Это немного медленно, но полученную функциональность сложно превзойти, если только не прибегнуть к реальному языку сценариев.

...