Проблема уровня ошибки пакетного сценария с ключом реестра

Приведенный ниже скрипт был написан для проверки, установлен ли 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
        )
    )
0
задан 18 May 2017 в 23:35
1 ответ

Расширение происходит до выполнения какой-либо команды внутри блока кода. В основном, все, что заключено в круглые скобки.

Поскольку переменная 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 (
1
ответ дан 4 December 2019 в 16:15

Теги

Похожие вопросы