bat文件:获取父路径名

时间:2010-01-31 15:02:17

标签: cmd batch-file pathname

以下内容大多有效。 'Mostly',因为当上下文XML文件试图通过相对路径名包含另一个时,使用SOMETHING .. \ tasks \ pathname会混淆Spring。因此,我似乎需要一种方法,在BAT文件中,将变量设置为路径名的父目录。

set ROOT=%~dp0
java -Xmx1g -jar %ROOT%\..\lib\ajar.jar %ROOT%\..\tasks\fas-model.xml tasks

3 个答案:

答案 0 :(得分:17)

要解析相对路径名,您可以使用子例程调用。 在批处理文件的末尾放置以下行:

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

答案 1 :(得分:7)

这是一个单线

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

答案 2 :(得分:2)

要扩展accepted answer,如果您想继续前进路径(例如,获取父级的父目录),请删除尾部斜杠:

: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个段。