A parte% ~ dp0 já foi mencionada, mas na verdade há mais: os caracteres após o ~ definem as informações que são extraídas.
Nenhuma letra resulta no retorno do nome do arquivo de correção
d - retorna a letra da unidade
p - retorna o caminho
s - retorna o caminho curto
x - retorna a extensão do arquivo
Portanto, se você executar o script test.bat abaixo no arquivo c: \ Temp \ nome do diretório longo \ pasta,
@echo off
echo %0
echo %~d0
echo %~p0
echo %~dp0
echo %~x0
echo %~s0
echo %~sp0
você obtém a seguinte saída
test
c:
\Temp\long dir name\
c:\Temp\long dir name\
.bat
c:\Temp\LONGDI~1\test.bat
\Temp\LONGDI~1\
E se um parâmetro for passado para o seu script como em
teste c: \ temp \ mysrc \ test.cpp
as mesmas manipulações podem ser feitas com a variável% 1.
Mas o resultado da expansão de% 0 depende da localização!
No "nível superior" do lote, ele se expande para o nome do arquivo do lote atual.
Em uma função (chamada), ela se expande para o nome da função.
@echo off
echo %0
call :test
goto :eof
:test
echo %0
echo %~0
echo %~n0
A saída é (o batchfile é iniciado com myBatch.bat)
myBatch.bat
:test
:test
myBatch