Pregunta

A continuación se trabaja principalmente. 'Medio', debido a que el uso de la ALGO .. \ \ nombre de ruta tareas confunde primavera cuando un archivo XML contexto trata de incluir otra por ruta relativa. Por lo tanto, lo que parece que necesitamos es una manera, en un archivo BAT, del establecimiento de una variable al directorio principal de un nombre de ruta.

set ROOT=%~dp0
java -Xmx1g -jar %ROOT%\..\lib\ajar.jar %ROOT%\..\tasks\fas-model.xml tasks
¿Fue útil?

Solución

Para resolver un nombre de ruta relativa se puede utilizar una llamada de rutina sub. Al final de su archivo por lotes lugar las siguientes líneas:

GOTO :EOF

:RESOLVE
SET %2=%~f1 
GOTO :EOF

Esta es una sub-rutina que resuelve su primer parámetro a una ruta completa (%~f1) y almacena el resultado en la variable (global) nombrado por el segundo parámetro

Se puede utilizar la rutina de la siguiente manera:

CALL :RESOLVE "%ROOT%\.." PARENT_ROOT

Después de la llamada puede utilizar la %PARENT_ROOT% variable que contiene el nombre de la ruta primaria contenida en la variable %ROOT%.

El archivo por lotes completa debería tener este aspecto:

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

Otros consejos

Aquí es un un trazador de líneas

for %%A in ("%~dp0\..") do set "root_parent=%%~fA"

Para ampliar sobre la respuesta aceptada , si desea mantener marchando por el camino (para obtener el directorio padre de los padres , por ejemplo), tira de la barra final:

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

cedería C:\My\Path de C:\My\Path\Child\file.bat.

Si he entendido mejor, me gustaría sugerir una "función de contenedor" por lo que podría CALL :REMOVE_SEGMENTS %path% 3 PARENT para despojar a los 3 últimos segmentos de %path%.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top