Windows BATCH: How to disable QuickEdit Mode for individual scripts?
Unfortunately, there is no way to edit the QuickEdit setting of the current CMD Console instance from command line. We can, however, temporarily disable the global QuickEdit setting and start a new console instance. There are a couple ways to do this, each with its own perks (pros) and drawbacks (cons). Both of the following solutions require the ability to modify the registry.
REGEDIT
- PRO: Compatible with any common Windows system
CON: Requires the creation of temporary REG files
Code (goes at the beginning of your script):
if exist "%TEMP%\consoleSettingsBackup.reg" regedit /S "%TEMP%\consoleSettingsBackup.reg"&DEL /F /Q "%TEMP%\consoleSettingsBackup.reg"&goto :mainstart regedit /S /e "%TEMP%\consoleSettingsBackup.reg" "HKEY_CURRENT_USER\Console" echo REGEDIT4>"%TEMP%\disablequickedit.reg" echo [HKEY_CURRENT_USER\Console]>>"%TEMP%\disablequickedit.reg" (echo "QuickEdit"=dword:00000000)>>"%TEMP%\disablequickedit.reg" regedit /S "%TEMP%\disablequickedit.reg" DEL /F /Q "%TEMP%\disablequickedit.reg" start "" "cmd" /c "%~dpnx0"&exit :mainstart
REG
- PRO: Does not require creation of temp files
- CON: Not available on Windows 2000 and earlier without Resource Kit
CON: Different versions have different syntax (accounted for in code below)
Code (goes at the beginning of your script):
set reg50=::&set reg51=::&(reg /?>nul 2>&1 && set reg51=) if %errorlevel%==5005 set reg50= set qkey=HKEY_CURRENT_USER\Console&set qprop=QuickEdit %reg51%if defined qedit_val (echo y|reg add "%qkey%" /v "%qprop%" /t REG_DWORD /d %qedit_val%&goto :mainstart) %reg50%if defined qedit_val (reg update "%qkey%\%qprop%"=%qedit_val%&goto :mainstart) %reg51%for /f "tokens=3*" %%i in ('reg query "%qkey%" /v "%qprop%" ^| FINDSTR /I "%qprop%"') DO set qedit_val=%%i %reg50%for /f "tokens=3*" %%i in ('reg query "%qkey%\%qprop%"') DO set qedit_val=%%i if "%qedit_val%"=="0" goto :mainstart if "%qedit_val%"=="0x0" goto :mainstart %reg51%echo y|reg add "%qkey%" /v "%qprop%" /t REG_DWORD /d 0 %reg50%if "%qedit_val%"=="" reg add "%qkey%\%qprop%"=0 REG_DWORD %reg50%if "%qedit_val%"=="1" reg update "%qkey%\%qprop%"=0 start "" "cmd" /c set qedit_val=%qedit_val% ^& call "%~dpnx0"&exit :mainstart
If you have another solution, feel free to post.
Already answered here, update "QuickMode" setting in Windows Registry:
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f
However it will not affect currently opened window. But you can reopen a window:
:: Get QuickEdit Mode setting from Windows Registry
FOR /F "usebackq tokens=3*" %%A IN (`REG QUERY "HKCU\Console" /v QuickEdit`) DO (
set quickEditSetting=%%A %%B
)
if %quickEditSetting%==0x1 (
:: Disable QuickEdit Mode
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f
:: Open script in a new Command Prompt window
start "" "%~dpnx0" %* && exit
)
... script logic here ...
exit
Additional info about HKEY_CURRENT_USER\Console
Registry configuration - https://renenyffenegger.ch/notes/Windows/registry/tree/HKEY_CURRENT_USER/console/index
A way that will affect the current command prompt session.
Here's quickEdit.bat
. It is a self-compiled .net script so it requires .net installed (not installed by default on Winsows XP/2003).
Usage:
Enable:
quickEdit 1
Disable:
quickEdit 2
Get State:
quickEdit 3