2014-02-16 87 views
4

如果您希望快速突出顯示並直接從命令提示符複製文本,而不是將輸出重定向到文件,QuickEdit模式可能很有用。但是,它有它的缺點。如果您正在運行批處理腳本,則在控制檯中選擇文本將暫停腳本執行,直到文本被取消選中。如果腳本預計會不停頓地繼續運行,這可能會成爲問題。Windows批處理:如何禁用單個腳本的QuickEdit模式?

如何禁用某些BATCH腳本的QuickEdit模式?

回答

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

    • PRO:不需要的臨時文件創建
    • CON:不可用在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 
      

如果您有其他的解決方案,隨意張貼。

+0

我給你的信用爲逆向思考。令人沮喪的是,沒有更簡單的方法,分發給最終用戶的批處理腳本可能會從失敗中「失敗」,除非我們想要一點點「破解」。 – searchengine27

3

一種會影響當前命令提示符會話的方式。

Here's quickEdit.bat。它是一個自編譯的.net腳本,因此需要安裝.net(在Winsows XP/2003上默認不安裝)。

用法:

啓用:

quickEdit 1 

禁用:

quickEdit 2 

得到國家:

quickEdit 3 
+0

這是超級有用和超級酷!編譯的exe文件是否需要.net框架?或者只是批處理文件需要它? –

+0

@MarkDodsons - 是 - 兩者都需要.net框架(這只是一些XP/Win2003機器的問題).net可執行文件[不完全一樣](https://stackoverflow.com/questions/2638883)作爲win32可執行文件。 – npocmaka