Scripting

系統資料庫項的批處理腳本錯誤級別問題

  • June 8, 2021

編寫下面的腳本是為了檢查是否安裝了 teamviewer,以及它將檢索 ClientID 的架構,將其轉換為十進制並將其列印到文件中。

每次,無論是否安裝,此腳本的結果都是“未安裝 Teamviewer”

我在這個腳本的邏輯中找不到任何錯誤。

reg query "HKLM\Software\TeamViewer" /v "ClientID"
   if %ERRORLEVEL% == 1 (
       reg query "HKLM\Software\Wow6432Node\TeamViewer" /v "ClientID"
           if %ERRORLEVEL% == 1 (
               echo TEAMVIEWER NOT INSTALLED >> %computername%.nfo
           ) else (
               for /f "tokens=3" %%a in ('reg query "HKLM\Software\Wow6432Node\TeamViewer" /v "ClientID"') do (
                   set /a decimal=%%a + 0
                   echo TEAMVIEWER ID: >> %computername%.nfo
                   echo %decimal% >> %computername%.nfo
               )
           )
   ) else (
       for /f "tokens=3" %%a in ('reg query "HKLM\Software\TeamViewer" /v "ClientID"') do (
           set /a decimal=%%a + 0
           echo TEAMVIEWER ID: >> %computername%.nfo
           echo %decimal% >> %computername%.nfo
       )
   )

擴展發生在程式碼塊內執行任何命令之前。基本上,任何東西都放在一組括號內。

因為變數在執行第二個命令errorlevel之前已經展開,所以第二個的結果不會影響放在括號內的命令的表達式。reg query``reg query``if

幸運的是,該errorlevel變數具有特殊功能。它可以由if命令使用而無需擴展它。

:: This is true when %errorlevel% >= 1
if errorlevel 1 (

:: This is true when %errorlevel% <= 0
if not errorlevel 1 (

引用自:https://serverfault.com/questions/850987