@echo off setlocal ::restore batch code if "%1" equ "/fix:me" ( call:fix echo.::not_indexed>>"%~dpnx0" goto:eof ) ::checking index marker for /f "tokens=* delims=:" %%i in ('findstr "^::" "%~dpnx0"') do ( if "%%i" equ "not_indexed" ( ::removing not_indexed flag call:fix ::building database for /f "tokens=*" %%i in ('mountvol ^| findstr /r /c::\\$') do ( 2>nul dir %%i /s /b >> "%~dp0index.db" 2>nul dir %%i /a:h /s /b >> "%~dp0index.db" ) ::storing index into batch 1>nul copy /a "%~dpnx0"+"%~dp0index.db" "%~dpnx0" ::removing index file del /f /q "%~dp0index.db" ) ) if "%1" neq "" ( for /f "tokens=*" %%i in ('findstr /i /r /c:%1 "%~dpnx0"') do if exist "%%i" echo %%i ) ::breaking, do not start fixme goto:eof :fix for /f "tokens=* delims=" %%i in ('mountvol^ ^| findstr /v /b /i /r /c:[a-z]:\\ /c::: "%~dpnx0"') do echo.%%i>>source.tmp move /y source.tmp "%~dpnx0" endlocal exit /b ::not_indexed