cmd - como - lista de comandos dos completa
archivo bat: obtener el nombre de ruta principal (3)
Para resolver un nombre de ruta relativo, puede utilizar una llamada sub rutina. Al final de su archivo por lotes, coloque las siguientes líneas:
GOTO :EOF
:RESOLVE
SET %2=%~f1
GOTO :EOF
Esta es una sub rutina que resuelve su primer parámetro en una ruta completa ( %~f1
) y almacena el resultado en la variable (global) nombrada por el segundo parámetro
Puede usar la rutina de esta manera:
CALL :RESOLVE "%ROOT%/.." PARENT_ROOT
Después de la llamada, puede usar la variable %PARENT_ROOT%
que contiene el nombre de ruta padre contenido en la variable %ROOT%
.
Su archivo de proceso por lotes completo debería verse así:
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
Lo siguiente funciona principalmente. ''Mayormente'', porque el uso de ALGO ... / tasks / pathname confunde Spring cuando un archivo XML de contexto intenta incluir a otro por nombre de ruta relativo. Entonces, lo que parece necesitar es una forma, en un archivo BAT, de establecer una variable en el directorio padre de una ruta de acceso.
set ROOT=%~dp0
java -Xmx1g -jar %ROOT%/../lib/ajar.jar %ROOT%/../tasks/fas-model.xml tasks
Aquí hay un trazador de líneas
for %%A in ("%~dp0/..") do set "root_parent=%%~fA"
Para expandir la respuesta aceptada , si desea seguir avanzando por la ruta (para obtener el directorio padre de los padres, por ejemplo), desmonte la barra inclinada 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
desde C:/My/Path/Child/file.bat
.
Si lo entendiera mejor, sugeriría una "función de envoltura" para poder CALL :REMOVE_SEGMENTS %path% 3 PARENT
para quitar los últimos 3 segmentos de %path%
.