файл bat: получить родительский путь
далее в основном работает. "В основном", потому что использование чего-то..tasks pathname путает Spring, когда контекстный XML-файл пытается включить другой по относительному пути. Итак,мне кажется, что мне нужен способ в файле BAT установить переменную в родительский каталог пути.
set ROOT=%~dp0
java -Xmx1g -jar %ROOT%..libajar.jar %ROOT%..tasksfas-model.xml tasks
3 ответов
чтобы разрешить относительное имя пути, вы можете использовать подпрограмму вызова. В конце пакетного файла, поместите следующие строки:
GOTO :EOF
:RESOLVE
SET %2=%~f1
GOTO :EOF
это подпрограмма, которая разрешает свой первый параметр на полный путь (%~f1
) и сохраняет результат в (глобальную) переменную, названную 2-м параметром
вы можете использовать процедуру следующим образом:
CALL :RESOLVE "%ROOT%\.." PARENT_ROOT
после вызова вы можете использовать переменную %PARENT_ROOT%
который содержит имя родительского пути, содержащееся в %ROOT%
переменной.
ваш полный пакетный файл должен выглядеть так:
SET ROOT=%~dp0
CALL :RESOLVE "%ROOT%\.." PARENT_ROOT
java -Xmx1g -jar "%PARENT_ROOT%\lib\ajar.jar" "%PARENT_ROOT%\tasks\fas-model.xml" tasks
GOTO :EOF
:RESOLVE
SET %2=%~f1
GOTO :EOF
для расширения на принято отвечать, если вы хотите продолжать маршировать по пути (например, чтобы получить родительский каталог родителя), очистите конечную косую черту:
:PARENT_PATH
:: use temp variable to hold the path, so we can substring
SET PARENT_PATH=%~dp1
:: strip the trailing slash, so we can call it again to get its parent
SET %2=%PARENT_PATH:~0,-1%
GOTO :EOF
использование:
CALL :PARENT_PATH "%~dp0" PARENT_ROOT
CALL :PARENT_PATH "%PARENT_ROOT%" PARENT_ROOT
echo Parent Root is: %PARENT_ROOT%
даст C:\My\Path
С C:\My\Path\Child\file.bat
.
если бы я понял это лучше, я бы предложил "функцию обертки", чтобы вы могли CALL :REMOVE_SEGMENTS %path% 3 PARENT
чтобы удалить последние 3 сегмента из %path%
.