Scripting
系統資料庫項的批處理腳本錯誤級別問題
編寫下面的腳本是為了檢查是否安裝了 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 (