Toplu dosyalarda, standart C programlarında olduğu gibi, 0 bağımsız değişkeni o anda yürütülmekte olan komut dosyasının yolunu içerir. %~dp0
0. bağımsız değişkenin (geçerli komut dosyası olan) yalnızca yol bölümünü almak için kullanabilirsiniz - bu yol her zaman tam nitelikli bir yoldur.
Kullanarak ilk argümanınızın tam yolunu da alabilirsiniz %~f1
, ancak bu geçerli çalışma dizinine göre bir yol verir, ki bu kesinlikle istediğiniz şey değildir.
Şahsen, %~dp0%~1
toplu iş dosyamdaki deyimi sık sık kullanıyorum , bu da ilk argümanı yürütme toplu işleminin yoluna göre yorumlar. Yine de bir eksikliği var: ilk argüman tam olarak nitelendirilirse sefil bir şekilde başarısız olur.
Her iki akraba desteklemek gerekirse ve mutlak yolları, sen yararlanabilir Frédéric Menez çözümüyle : geçici olarak geçerli çalışma dizini değiştirin.
İşte bu tekniklerin her birini gösterecek bir örnek:
@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
Bunu c: \ temp \ example.bat olarak kaydederseniz ve c: \ Users \ Public as
c: \ Kullanıcılar \ Herkese Açık> \ temp \ example.bat .. \ windows
... şu çıktıyı gözlemleyeceksiniz:
%~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"
toplu iş argümanında izin verilen değiştirici kümesine ilişkin belgeleri burada bulabilirsiniz:
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/call
realpath
sağlam yol normalleştirmesi için bir analoga ihtiyacınız olacaktır .