Algumas dicas a serem observadas:
Se você clicar duas vezes no arquivo em lotes %0, será cercado por aspas. Por exemplo, se você salvar este arquivo como c:\test.bat:
@echo %0
@pause
Clicar duas vezes nele abrirá um novo prompt de comando com a saída:
"C:\test.bat"
Mas se você abrir um prompt de comando e chamá-lo diretamente a partir desse prompt, %0fará referência ao que você digitou . Se você digitar test.batEnter, a saída de %0não terá aspas porque você não digitou aspas:
c:\>test.bat
test.bat
Se você digitar testEnter, a saída de %0também não terá extensão, porque você não digitou nenhuma extensão:
c:\>test
test
Mesmo para tEsTEnter:
c:\>tEsT
tEsT
Se você digitar "test"Enter, a saída de %0terá aspas (desde que você as digitou), mas sem extensão:
c:\>"test"
"test"
Por fim, se você digitar "C:\test.bat", a saída será exatamente como se você tivesse clicado duas vezes:
c:\>"C:\test.bat"
"C:\test.bat"
Observe que esses nem todos os valores possíveis %0podem ser porque você pode chamar o script de outras pastas:
c:\some_folder>/../teST.bAt
/../teST.bAt
Todos os exemplos mostrados acima também afetarão %~0 , porque a saída de %~0é simplesmente a saída de %0 menos aspas (se houver).
echo %~dp0não funcionará na linha de comando, apenas em um arquivo em lotes. Duh!