Почему первая строка командного файла не выполняется? - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь понять, почему первая строка моего командного файла не выполняется. Мой код выглядит следующим образом:

if exist reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion" goto OptionOne
exit
:OptionOne
some code
goto:eof

Она никогда не переходит к подпрограмме OptionOne. Вместо этого он просто выходит.

У меня есть решение этой проблемы, написанное по-другому (поэтому я не хочу, чтобы примеры заставляли его работать), но я хочу понять, почему эта строка не выполняется.

  • Синтаксис неправильный? Google говорит, что это правильно.
  • Плохо разработанный код? Я знаю, что этот раздел реестра существует, поэтому это не так.
  • Это что-то с возвращаемым значением и его правильным синтаксисом, но должно быть дополнительно записано в операторах else?

Ответы [ 3 ]

1 голос
/ 22 марта 2019

Код, который у вас есть, не работает, потому что if exist используется только , чтобы проверить, существуют ли папки или файлы. Его синтаксис:

if exist "C:\foldername\" (do something) else (optionally do something else)

для папок и:

if exist "C:\filename" (do something) else (optionally do something else)

для файлов.

Мое предлагаемое решение (как упомянуто в комментариях) следующее:

reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion" >nul 2>&1
if %errorlevel% EQU 0 (goto :OptionOne) else (echo Registry key not found. & pause>nul & exit /b 1)

:OptionOne
some code
goto :eof

, который проверяет, вернулась ли команда errorlevel отличается чем равно 1 или больше (ключ реестра существует) или 1 или больше (это не так есть).

0 голосов
/ 22 марта 2019

Просто запустите reg query и отметьте %errorlevel%, как вы видите здесь:

Prompt>reg query "HKCU\..." (put something which exists)

<some successful answers>
Prompt>echo %errorlevel%
0

Prompt>reg query "blabla"
ERROR: Invalid key name.
Type "REG QUERY /?" for usage.

Prompt>echo %errorlevel%
1

Вы можете проверить %errorlevel% в своем пакетном скрипте.

0 голосов
/ 22 марта 2019

REG QUERY возвращает только 0 в случае успеха или 1 в случае ошибки. Обратите внимание, что результаты не являются успешной операцией запроса и будут возвращать 0.

Ссылка: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/reg-query

И, как отметили комментаторы, IF EXIST предназначен только для файлов и папок, а не для команд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...