以下主要工作。 'Mostly',因为当上下文XML文件试图通过相对路径名包含另一个时,使用SOMETHING .. \ tasks \路径名会混淆Spring。所以,我似乎需要的是在BAT文件中,将变量设置为路径名的父目录。bat文件:获取父路径
set ROOT=%~dp0
java -Xmx1g -jar %ROOT%\..\lib\ajar.jar %ROOT%\..\tasks\fas-model.xml tasks
以下主要工作。 'Mostly',因为当上下文XML文件试图通过相对路径名包含另一个时,使用SOMETHING .. \ tasks \路径名会混淆Spring。所以,我似乎需要的是在BAT文件中,将变量设置为路径名的父目录。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%
包含包含在父路径名变量。
你完整的批处理文件应该是这样的:
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"
,如果你想保持踏着向上的路径扩大了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\Child\file.bat
产生C:\My\Path
。
如果我理解的更好,我会建议一个“包装函数”,以便您可以从%path%
中去掉最后3个段。
嗯,好主意。我会滥用'pushd','popd'和'%CD%',但实际上这个更优雅。 – Joey 2010-01-31 16:31:35
@Johannes:谢谢,我也想过'pushd'和'popd',但我不记得'%CD%'变量了。所以这种方式对我来说更为明显。 – 2010-01-31 16:39:00
Paraphrasing Perl:*»批处理文件:有多种方法可以完成这项工作«* ;-) – Joey 2010-01-31 16:52:24