Nei file batch, come nei programmi C standard, l'argomento 0 contiene il percorso dello script attualmente in esecuzione. È possibile utilizzare %~dp0
per ottenere solo la parte del percorso del 0 ° argomento (che è lo script corrente) - questo percorso è sempre un percorso completo.
Puoi anche ottenere il percorso completo del tuo primo argomento usando %~f1
, ma questo fornisce un percorso in base alla directory di lavoro corrente, che ovviamente non è ciò che desideri.
Personalmente, utilizzo spesso il %~dp0%~1
linguaggio nel mio file batch, che interpreta il primo argomento relativo al percorso del batch in esecuzione. Tuttavia ha un difetto: fallisce miseramente se il primo argomento è pienamente qualificato.
Se devi supportare percorsi relativi e assoluti, puoi utilizzare la soluzione di Frédéric Ménez : cambiare temporaneamente la directory di lavoro corrente.
Ecco un esempio che dimostrerà ciascuna di queste tecniche:
@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
Se lo salvi come c: \ temp \ example.bat e lo esegui da c: \ Users \ Public come
c: \ Users \ Public> \ temp \ example.bat .. \ windows
... osserverai il seguente output:
%~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"
la documentazione per l'insieme di modificatori consentiti su un argomento batch è disponibile qui:
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/call
realpath
per una solida normalizzazione del percorso.