【问题标题】:Windows BATCH: How to disable QuickEdit Mode for individual scripts?Windows BATCH:如何禁用单个脚本的快速编辑模式?
【发布时间】:2014-03-15 08:52:19
【问题描述】:

如果您希望直接从命令提示符快速突出显示和复制文本,而不是将输出重定向到文件,则快速编辑模式会很有用。但是,它也有其缺点。如果您正在运行批处理脚本,则在控制台中选择文本将暂停脚本执行,直到取消选择文本。如果脚本预计会不间断地继续,这可能是个问题。

如何禁用某些 BATCH 脚本的快速编辑模式?

【问题讨论】:

    标签: windows batch-file console registry settings


    【解决方案1】:

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

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

      • 专业版:不需要创建临时文件
      • CON:在没有 Resource Kit 的 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
        

    如果您有其他解决方案,请随时发布。

    【讨论】:

    • 我会感谢您跳出框框思考。真令人沮丧,没有更简单的方法,分发给最终用户的批处理脚本可能从一开始就“失败”,除非我们想稍微“破解”一下。
    【解决方案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

      【讨论】:

        猜你喜欢
        • 2015-09-01
        • 2020-07-08
        • 2023-03-19
        • 1970-01-01
        • 2016-09-26
        • 2017-11-09
        • 2012-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多