Se um argumento passado para um script em lote é um arquivo, você pode usar variáveis de ambiente para obter coisas como caminho, nome do arquivo, extensão de arquivo, etc. Por exemplo:
@echo off
::
::If no parameter is passed, exit.
::
if [%~1]==[] echo Missing parameter! Script will exit... && exit /b
::
::If file does not exist, exit.
::
if not exist "%~1" echo File does not exist. Are you sure "%~1" is a file? && exit /b
echo.
echo File info
echo ---------
echo Path: %~dp1
echo Name: %~n1
echo Extension: %~x1
echo.
pause
exit /b
Isso funciona independentemente de você arrastar o arquivo para o script ou passá-lo como um parâmetro na linha de comando. Você pode aprender mais sobre argumentos e sua sintaxe estendida em SS64.com.