usar lista completa como comandos comando codigos codigo basicos cmd batch-file pathname

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