以下主要工作。 '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