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
Foi útil?

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%.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top