標準Cプログラムと同様に、バッチファイルでは、引数0に現在実行中のスクリプトへのパスが含まれています。を使用%~dp0
して、0番目の引数(現在のスクリプト)のパス部分のみを取得できます。このパスは常に完全修飾パスです。
また、を使用して最初の引数の完全修飾パスを取得することもできます%~f1
が、これにより、現在の作業ディレクトリに応じたパスが得られますが、これは明らかに望ましいものではありません。
個人的に%~dp0%~1
は、バッチファイルでイディオムをよく使用します。このイディオムは、実行中のバッチのパスに関連する最初の引数を解釈します。ただし、欠点もあります。最初の引数が完全に修飾されていると、惨めに失敗します。
相対パスと絶対パスの両方をサポートする必要がある場合は、フレデリックメネスのソリューションを利用できます。現在の作業ディレクトリを一時的に変更します。
これらの手法のそれぞれを示す例を次に示します。
@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にあります。
realpath
、堅牢なパスの正規化のためのアナログも必要になります。