Приведенный ниже скрипт был написан для проверки, установлен ли teamviewer или нет, и для какой архитектуры он будет извлекать его ClientID, преобразовывать его в десятичное и печатать в файл.
Каждый раз, независимо от того, установлен он или нет, результатом этого сценария будет «Teamviewer не установлен»
I Не удалось найти логическую ошибку в этом сценарии.
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 (