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.

  1. 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
      
  2. 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