Приведенный ниже сценарий был написан, чтобы проверить, установлен ли 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 (