Windows BATCH:如何禁用单个脚本的快速编辑模式?
Posted
技术标签:
【中文标题】Windows BATCH:如何禁用单个脚本的快速编辑模式?【英文标题】:Windows BATCH: How to disable QuickEdit Mode for individual scripts? 【发布时间】:2014-03-15 08:52:19 【问题描述】:如果您希望直接从命令提示符快速突出显示和复制文本,而不是将输出重定向到文件,则快速编辑模式会很有用。但是,它也有其缺点。如果您正在运行批处理脚本,则在控制台中选择文本将暂停脚本执行,直到取消选择文本。如果脚本预计会不间断地继续,这可能是个问题。
如何禁用某些 BATCH 脚本的快速编辑模式?
【问题讨论】:
【参考方案1】:很遗憾,无法从命令行编辑当前 CMD 控制台实例的 QuickEdit 设置。但是,我们可以暂时禁用全局 QuickEdit 设置并启动一个新的控制台实例。有几种方法可以做到这一点,每种方法都有自己的优点(优点)和缺点(缺点)。以下两种解决方案都需要能够修改注册表。
REGEDIT
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
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
如果您有其他解决方案,请随时发布。
【讨论】:
我会感谢您跳出框框思考。真令人沮丧,没有更简单的方法,分发给最终用户的批处理脚本可能从一开始就“失败”,除非我们想稍微“破解”一下。【参考方案2】:一种会影响当前命令提示符会话的方式。
这里是quickEdit.bat
。它是一个自编译的 .net 脚本,因此需要安装 .net(在 Winsows XP/2003 上默认不安装)。
用法:
启用:
quickEdit 1
禁用:
quickEdit 2
获取状态:
quickEdit 3
【讨论】:
这个超级好用,超级酷!编译后的 exe 是否需要 .net 框架?还是只是批处理文件需要它? @MarkDodsons - 是的 - 两者都需要 .net 框架(这只是一些 XP/Win2003 机器的问题)。.net 可执行文件 are not exactly the same 作为 win32 可执行文件。【参考方案3】:对对我有用的选项 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
【讨论】:
【参考方案4】:已经回答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
【讨论】:
以上是关于Windows BATCH:如何禁用单个脚本的快速编辑模式?的主要内容,如果未能解决你的问题,请参考以下文章