2016-04-04 3 views
0

Я рассмотрел несколько вопросов здесь, и мне не удалось найти то, что я искал. Надеюсь, я могу получить некоторые разъяснения по этому вопросу .. У меня есть следующий код партии Блок:Batch If and Else Error

:CommandCheck 
If Exist java -version (goto start)Else 
(echo !!Java not installed!! Installing supported version now) 
goto install 

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

ответ

0

Следует упомянуть, что проверка конкретной версии определенного программного обеспечения - это разнообразная и сложная задача, вдвойне в Windows, и тем более с помощью пакетного сценария.

Вы можете проверить точный путь к исполняемому файлу java и предположить, что он не установлен, если Windows не может его найти.

:CommandCheck 
    if not exist "c:\path\to\java.exe" (goto Install) 
    goto Start 

также:

  1. Не забывайте двойные кавычки при использовании IF EXIST
  2. Вы можете рассмотреть вопрос о помощи вызовов вместо GOTOS.

Отъезд http://www.robvanderwoude.com/ и http://ss64.com/nt/ для получения дополнительной информации об обучении пакетных скриптов. И переполнение стека конечно :)

+0

Спасибо за быстрый ответ. Я пытаюсь проверить, существует ли команда. Будет ли это тоже нужно быть в ""? Я попытался сделать это, и проверка снова не удалась. –

+0

Можете ли вы уточнить, что вы имеете в виду, когда говорите «команда». Вы имеете в виду входной параметр i.e "yourscript.bat java yourfile.jar"? – nerflad

+0

Несомненно. То, что я пытаюсь сделать, - проверить наличие команды в cmd. В этом случае я хочу проверить «java -version». Если этого не существует, я пытаюсь заставить его перейти к другой части скрипта. Если он существует, то и перейти к другому разделу. Надеюсь, это поможет. –

0

Попробуйте добавить функцию паузы в конец.

+0

Спасибо за подсказку. К сожалению, это не сработало. Это все равно не получило бы проверку. –

1

Во-первых, ваша логика не требует ELSE:

:CommandCheck 
If exist "someFile" goto start 
echo !!Java not installed!! Installing supported version now 
goto install 

Но я не думаю, что вы пытаетесь проверить существование файла. Вместо этого вы пытаетесь запустить команду java -version, и вы хотите начать, если эта команда была успешной, и распечатать сообщение и перейти к установке, если она не удалась.

Оператор && может условно выполнить команду, если предыдущая команда выполнена успешно. Существует кораллал || для выполнения команды, если предыдущая команда не удалась.

someCommand && echo someCommand succeeded || echo someCommand failed 

Вам нужен только тот или иной. Я также предполагаю, что вам не нужно видеть вывод (или сообщение об ошибке) теста java -version.

:CommandCheck 
java -version >nul 2>nul && goto start 
echo !!Java not installed!! Installing supported version now 
goto install 

Если вы когда-нибудь действительно хотите использовать IF ELSE с круглыми скобками, есть несколько важных правил синтаксиса

  • Скобки должны быть в том же направлении, что и предыдущего IF и ELSE
  • Там должен быть пробел перед каждой открывающей скобкой

Вот пример

if exist "someFile" (
    echo someFile exists 
) else (
    echo someFile does NOT exist 
) 

Все это можно поставить на одну линию

if exist "someFile" (echo someFile exists)else (echo someFile does NOT exist) 

Следующая терпит неудачу, потому что открывающие скобки не предшествует пробел, так "someFIle"( и else( рассматриваются как знаки, которые не могут работать.

if exist "someFile"(echo someFile exists)else(echo someFile does NOT exist) 

Следующая терпит неудачу, потому что круглые скобки должны быть на той же линии, как IF и ELSE

if exist "someFile" 
    (echo someFile exists) 
else 
    (echo someFile does NOT exist) 
+0

Это отличная информация. Я сделал заметку для дальнейшего использования. Спасибо! –