Algunas trampas a tener en cuenta:
Si hace doble clic en el archivo por lotes %0, estará entre comillas. Por ejemplo, si guarda este archivo como c:\test.bat:
@echo %0
@pause
Al hacer doble clic se abrirá un nuevo símbolo del sistema con salida:
"C:\test.bat"
Pero si primero abre un símbolo del sistema y lo llama directamente desde ese símbolo del sistema, %0se referirá a lo que haya escrito . Si escribe test.batEnter, la salida de %0no tendrá comillas porque no escribió comillas:
c:\>test.bat
test.bat
Si escribe testEnter, la salida de %0no tendrá extensión, porque no escribió extensión:
c:\>test
test
Lo mismo para tEsTEnter:
c:\>tEsT
tEsT
Si escribe "test"Enter, la salida de %0tendrá comillas (ya que las escribió) pero sin extensión:
c:\>"test"
"test"
Por último, si escribe "C:\test.bat", el resultado sería exactamente como si hubiera hecho doble clic en él:
c:\>"C:\test.bat"
"C:\test.bat"
Tenga en cuenta que estos no son todos los valores posibles %0porque puede llamar al script desde otras carpetas:
c:\some_folder>/../teST.bAt
/../teST.bAt
Todos los ejemplos mostrados arriba también afectarán %~0, porque la salida de %~0es simplemente la salida de %0 comillas negativas (si las hay).
echo %~dp0no funcionará en la línea de comandos, solo en un archivo por lotes. Duh!