@echo off
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set result=
set found=
if exist "%~1" call :abspath "%~1"
if not "%found%" == "" goto :end
call :checkpath "%~1"
if not "%found%" == "" goto :end
set i=1
:checkexts
set ext=
for /F "usebackq tokens=%i% eol=;" %%x in (`echo %PATHEXT%`) do (
set ext=%%~x
if exist "%~1%%~x" (
set found=1
set result=%~1%%~x
goto :end
) else (
call :checkpath "%~1%%~x"
)
)
if "%ext%" == "" goto :end
if not "%found%" == "" goto :end
set /A i+=1
goto :checkexts
:end
call :abspath "%result%"
if "%found%" == "1" (
echo %result%
) else (
echo File not found.
)
ENDLOCAL
goto :eof
:checkpath
set result=%~$path:1
if exist "%result%" call :abspath %result%
goto :eof
:abspath
set result=%~f1
set attribs=%~a1
if "%result%" == "" (
goto :eof
) else if "%attribs%" == "" (
call :abspath %result%
goto :eof
)
if not "%attribs:~0,1%" == "d" if exist "%result%" set found=1
goto :eof