Windows批次:如何禁用单个脚本的快速编辑模式?

disho6za  于 2023-02-20  发布在  Windows
关注(0)|答案(5)|浏览(451)

如果希望直接从命令提示符快速突出显示和复制文本,而不是将输出重定向到文件,则快速编辑模式非常有用。但是,它也有缺点。如果正在运行批处理脚本,则在控制台中选择文本将暂停脚本执行,直到取消选择该文本为止。如果希望脚本继续运行而不暂停,则可能会出现问题。
如何禁用某些BATCH脚本的QuickEdit模式?

368yc8dk

368yc8dk1#

将影响当前命令提示符会话的方法。
这是quickEdit.bat,它是一个自编译的. net脚本,因此需要安装. net(在Winsows XP/2003上默认不安装)。
用法:
启用:

quickEdit  1

禁用:

quickEdit  2

获取状态:

quickEdit  3
72qzrwbm

72qzrwbm2#

已回答here,更新Windows注册表中的“QuickMode”设置:

reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f

但是它不会影响当前打开的窗口。但是您可以重新打开一个窗口:

:: 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

有关HKEY_CURRENT_USER\Console注册表配置的其他信息-https://renenyffenegger.ch/notes/Windows/registry/tree/HKEY_CURRENT_USER/console/index

aydmsdu9

aydmsdu93#

不幸的是,没有办法从命令行编辑当前CMD控制台示例的QuickEdit设置。但是,我们可以暂时禁用全局QuickEdit设置并启动一个新的控制台示例。有几种方法可以做到这一点,每种方法都有自己的优点(优点)和缺点(缺点)。以下两种解决方案都需要修改注册表的能力。

  • REGEDIT
  • PRO:兼容任何常见的Windows系统
  • CON:需要创建临时REG文件
  • 代码(位于脚本开头):
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:不需要创建临时文件
  • 缺点:在没有资源工具包的Windows 2000及更早版本上不可用
  • CON:不同的版本有不同的语法(在下面的代码中说明)
  • 代码(位于脚本开头):
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

如果你有其他的解决方案,请随时张贴。

2cmtqfgy

2cmtqfgy4#

选项1的轻微更新,对我来说很有效,不会运行两次,在Win10上,谢谢。

if exist "c:\temp\consoleSettingsBackup.reg" regedit /S "c:\temp\consoleSettingsBackup.reg" & DEL /F /Q "c:\temp\consoleSettingsBackup.reg" & goto START
regedit /S /e "c:\temp\consoleSettingsBackup.reg" "HKEY_CURRENT_USER\Console"
reg add "HKCU\Console" /v QuickEdit /t REG_DWORD /d 0 /f
start "" "cmd" /c ""%~dpnx0" & exit"
exit

: START
rem your commands\scripts here

exit
nxagd54h

nxagd54h5#

quickedit.bat

::: TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAAClmdnY4fi3i+H4t4vh+LeL4fi2i+T4t4si9+qL4vi3i7Xbh4vg+LeLUmljaOH4t4sAAAAAAAAAAAAAAAAAAAAAUEUAAEwBAQBvnfBjAAAAAAAAAADgAA8BCwEGAAACAAAAAAAAAAAAABgQAAAAEAAAACAAAAAAQAAAEAAAAAIAAAQAAAAAAAAABAAAAAAAAAAAIAAAAAIAAAAAAAADAAAAAAAQAAAQAAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAABUEQAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAPQBAAAAEAAAAAIAAAACAAAAAAAAAAAAAAAAAAAgAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmEQAAshEAAMQRAADWEQAAlBEAAAAAAABVi+yD7AxTVos1DBBAAGr2/9aL2IXbD4T6AAAAg/v/D4TxAAAAjUX4UFP/FQgQQACFwA+E3gAAAP8VBBBAAIXAdH+KCITJdHmA+SJ1FUCKCITJdG1AgPkidGGKCITJdfTrWYD5IHRUgPkJdE9AigiEyXXv60aA+TB0doD5T3QFgPlvdRqKUAGA+kZ0BYD6ZnUNilACgPpGdFeA+mZ0UoD5MXRWgPlPdAWA+W91DYpIAYD5TnREgPludD9AigiEyXW0i134g2X0AMHrBoPjAWoAisMEMIhF/41F9FCNRf9qAVBq9f/WUP8VABBAAIvD60iLRfgkvwyA6wWLRfgMwDlF+HQPUFP/FRAQQAD32BvAQOsmM8DrIoNl9ACNRfRqAFCNRf9qAVBq9cZF/y//1lD/FQAQQACDyP9eW8nDfBEAAAAAAAAAAAAA5hEAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKYRAACyEQAAxBEAANYRAACUEQAAAAAAAP0CU2V0Q29uc29sZU1vZGUAAKQDV3JpdGVGaWxlABABR2V0Q29tbWFuZExpbmVBADMBR2V0Q29uc29sZU1vZGUAALkBR2V0U3RkSGFuZGxlAABLRVJORUwzMi5kbGwAAAAAAAAAAAAAAAAAAA==

@setlocal disabledelayedexpansion enableextensions
@echo off

if not exist quickedit.exe (
  >quickedit.b64 (
    for /f "delims=: tokens=1" %%# in ('findstr "^:::" "%~f0"') do echo %%#
  )
  certutil -f -decode quickedit.b64 quickedit.exe >nul
  del /f /q quickedit.b64
)

quickedit.exe %*

日期:快速编辑1
关闭:快速编辑0

相关问题