以下大多工作。 “晴”,因为使用了什么的.. \任务\路径名混淆春天,当一个上下文XML文件尝试包括另一个由相对路径名。所以,我似乎需要一种方法,在一个BAT文件中,变量设置为路径名的父目录的。

set ROOT=%~dp0
java -Xmx1g -jar %ROOT%\..\lib\ajar.jar %ROOT%\..\tasks\fas-model.xml tasks
有帮助吗?

解决方案

要解决,你可以利用的子程序调用的相对路径名。 在批处理文件位置的端部的下面的行:

GOTO :EOF

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

这是可以解决的第一个参数为完整路径(%~f1),并将结果存储到由所述第二参数指定的(全局)变量的子程序

可以使用例程这样的:

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

呼叫后,可以使用可变%PARENT_ROOT%包含父路径名包含在%ROOT%变量。

您完整的批处理文件应该是这样的:

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

其他提示

下面是一个衬里

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

要扩大在接受的答案,如果你想保持向上进发的路径(获取父的父目录,例如),剥离斜线:

: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

用法:

CALL :PARENT_PATH "%~dp0" PARENT_ROOT
CALL :PARENT_PATH "%PARENT_ROOT%" PARENT_ROOT
echo Parent Root is: %PARENT_ROOT%

将从C:\My\Path得到C:\My\Path\Child\file.bat

如果我理解它更好,我建议一个“包装函数”,所以你可以CALL :REMOVE_SEGMENTS %path% 3 PARENT%path%剥离的最后3个区段。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top