@echo off
setlocal enabledelayedexpansion
title Remove VTFEdit context menu entries

set default_extensions=jpg,jpeg,png,bmp,tga,tiff,psd,gif,eps,webp,bpg,cd5,cpt,kra,mdp,pdn,psp,sai,xcf

:check_elevation
net session >nul 2>&1
if not %errorlevel%==0 echo   & echo Error: Must run as administrator. & pause>nul & goto :eof

:: exec for all extensions
for %%E in (%default_extensions%) do CALL :CheckKey %%E

if "%found%"=="" ( echo  & echo No entries to remove^^! Exiting.& pause>nul & goto :eof) else ( echo Found entries for^: %found%)

:hintextensions
echo.
echo Please enter file extensions to remove, divided by comma, lowercase, no dots or just press enter for remove ALL
echo.
:askextensions
set /p extensions="What extensions to delete for (default %found%): "
if not "!extensions!"=="" (
	set "extensions=!extensions: =!"
	for /f "tokens=1 delims=abcdefghijklmnopqrstuvwxyz1234567890," %%A in ('echo !extensions!') do (
		set "extensions=%default_extensions%"
		echo Warning: input incorrect, will use default setting ^(%found%^)
		pause
	)
) else ( set "extensions=%found%" )

:: exec for all extensions
for %%E in (%extensions%) do CALL :DelKey %%E

:: results
echo.
echo -------------------------------------------------------
if "!processedcount!"=="" ( echo  No entries to remove ) else ( echo  !processedcount! entries removed: !processed! )
echo -------------------------------------------------------
echo.
pause & goto :eof

:CheckKey
reg query "HKCR\SystemFileAssociations\.%1\shell\VTFEdit.open">nul 2>&1 && CALL :LogExtFound %1
goto :eof

:DelKey
reg delete "HKCR\SystemFileAssociations\.%1\shell\VTFEdit.open" /f>nul 2>&1 && CALL :LogExtRemoved %1
goto :eof

:LogExtRemoved
if "!processedcount!"=="" ( set "processedcount=1" ) else ( set /a "processedcount=!processedcount!+1" ) 
if "!processed!"=="" ( set "processed=%1" ) else ( set "processed=!processed!,%1" )
goto :eof

:LogExtFound
if "!foundcount!"=="" ( set "foundcount=1" ) else ( set /a "foundcount=!foundcount!+1" ) 
if "!found!"=="" ( set "found=%1" ) else ( set "found=!found!,%1" )
goto :eof