Arquivo de morcego: Obtenha o nome do pai
-
24-09-2019 - |
Pergunta
O seguinte funciona principalmente. 'Principalmente', porque o uso do algo .. Tasks PathName confunde Spring quando um arquivo XML de contexto tenta incluir outro por Relativo Pathname. Então, o que eu pareço precisar é de uma maneira, em um arquivo BAT, de definir uma variável para o diretório pai de um nome de caminho.
set ROOT=%~dp0
java -Xmx1g -jar %ROOT%\..\lib\ajar.jar %ROOT%\..\tasks\fas-model.xml tasks
Solução
Para resolver um nome de caminho relativo, você pode utilizar uma sub -rotina. No final do seu arquivo em lote, coloque as seguintes linhas:
GOTO :EOF
:RESOLVE
SET %2=%~f1
GOTO :EOF
Esta é uma sub -rotina que resolve seu primeiro parâmetro em um caminho completo (%~f1
) e armazena o resultado na variável (global) nomeada pelo 2º parâmetro
Você pode usar a rotina como esta:
CALL :RESOLVE "%ROOT%\.." PARENT_ROOT
Após a chamada, você pode usar a variável %PARENT_ROOT%
que contém o nome do caminho dos pais contido no %ROOT%
variável.
Seu arquivo em lote completo deve ficar assim:
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
Outras dicas
Aqui está um revestimento único
for %%A in ("%~dp0\..") do set "root_parent=%%~fA"
Para expandir o resposta aceita, se você quiser continuar marchando pelo caminho (para obter o diretório pai dos pais, por exemplo), retire a barra à direita:
: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
Uso:
CALL :PARENT_PATH "%~dp0" PARENT_ROOT
CALL :PARENT_PATH "%PARENT_ROOT%" PARENT_ROOT
echo Parent Root is: %PARENT_ROOT%
cederia C:\My\Path
a partir de C:\My\Path\Child\file.bat
.
Se eu entendesse melhor, eu sugeriria uma "função de wrapper" para que você pudesse CALL :REMOVE_SEGMENTS %path% 3 PARENT
Para retirar os últimos 3 segmentos de %path%
.