以下は主に機能します。SOMETHING..\tasks\ パス名を使用すると、コンテキスト XML ファイルが相対パス名で別のファイルを含めようとすると、Spring が混乱するため、「ほとんど」です。したがって、私が必要としているのは、BAT ファイルで、パス名の親ディレクトリに変数を設定する方法です。
set ROOT=%~dp0
java -Xmx1g -jar %ROOT%\..\lib\ajar.jar %ROOT%\..\tasks\fas-model.xml tasks
以下は主に機能します。SOMETHING..\tasks\ パス名を使用すると、コンテキスト XML ファイルが相対パス名で別のファイルを含めようとすると、Spring が混乱するため、「ほとんど」です。したがって、私が必要としているのは、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
)に解決し、その結果を2番目のパラメーターで指定された(グローバル)変数に格納するサブルーチンです。
次のようなルーチンを使用できます。
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
から最後の 3 つのセグメントを削除できるようにします%path%
。