バッチ ファイルでは、標準の C プログラムと同様に、引数 0 には現在実行中のスクリプトへのパスが含まれます。を使用%~dp0
して、0 番目の引数 (現在のスクリプト) のパス部分のみを取得できます。このパスは常に完全修飾パスです。
を使用して最初の引数の完全修飾パスを取得することもできます%~f1
が、これは現在の作業ディレクトリに応じたパスを提供しますが、これは明らかに必要なものではありません。
個人的に%~dp0%~1
は、実行中のバッチのパスに関連する最初の引数を解釈するイディオムをバッチ ファイルでよく使用します。ただし、これには欠点があります。最初の引数が完全に修飾されている場合、惨めに失敗します。
相対パスと絶対パスの両方をサポートする必要がある場合は、 Frédéric Ménez のソリューションを利用できます: 現在の作業ディレクトリを一時的に変更します。
これらの各手法を示す例を次に示します。
@echo off
echo %%~dp0 is "%~dp0"
echo %%0 is "%0"
echo %%~dpnx0 is "%~dpnx0"
echo %%~f1 is "%~f1"
echo %%~dp0%%~1 is "%~dp0%~1"
rem Temporarily change the current working directory, to retrieve a full path
rem to the first parameter
pushd .
cd %~dp0
echo batch-relative %%~f1 is "%~f1"
popd
これを c:\temp\example.bat として保存し、c:\Users\Public から実行すると、
c:\Users\Public>\temp\example.bat ..\windows
...次の出力が表示されます。
%~dp0 is "C:\temp\"
%0 is "\temp\example.bat"
%~dpnx0 is "C:\temp\example.bat"
%~f1 is "C:\Users\windows"
%~dp0%~1 is "C:\temp\..\windows"
batch-relative %~f1 is "C:\Windows"
バッチ引数で許可されている一連の修飾子に関するドキュメントは、
https ://docs.microsoft.com/en-us/windows-server/administration/windows-commands/call にあります。