Windows BATCH: How to disable QuickEdit Mode for individual scripts?
Solution 1
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.
Solution 2
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
Solution 3
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
Lectrode
Website designer/programmer Software designer/programmer Current projects: -Quick Net Fix (https://github.com/lectrode/quick-net-fix)
Updated on July 25, 2022Comments
-
Lectrode almost 2 years
QuickEdit mode can be useful if you wish to quickly highlight and copy text directly from the command prompt instead of redirecting output to a file. However, it has its drawbacks. If you have a batch script running, selecting text in the console will pause the script execution until the text is deselected. This can be a problem if the script is expected to continue without pause.
How can one disable QuickEdit mode for certain BATCH scripts?