2015-12-30 3 views
1

У меня есть простой тест, чтобы сказать мне, работает ли tomcat8 или нет. Он просто выводит, если служба найдена или нет.Как сформулировать пакетный скрипт, если условие else

net start | find "Tomcat8" > nul 2>&1 
if %ERRORLEVEL%==0 echo "Tomcat8 is running" 
if %ERRORLEVEL%==1 echo "Tomcat8 not running" 

Как я мог на самом деле интегрировать это в функцию, так что я мог бы первый тест, если tomcat8 работает, и если да - Гото конец :, а если нет - запустить службу?

например.

ответ

0

Read if /?:

%ERRORLEVEL% будет расширяться в строковое представление текущего значения ERRORLEVEL, при условии, что не существует уже переменная среды с именем ERRORLEVEL, в этом случае вы получите его значение вместо этого. После запуска программы, следующий иллюстрирует ERRORLEVEL использования:

goto answer%ERRORLEVEL% 
:answer0 
echo Program had return code 0 
:answer1 
echo Program had return code 1 

К сожалению, выше фрагмент кода, кажется, немного сбивают с толком, как дисплеи оба сообщения в случае errorlevel 0. Попробуйте следующее (в сочетании с find return codes):

net start | find "Tomcat8" > nul 2>&1 
    goto answer%ERRORLEVEL% 

    :answer0 
    echo `find` had return code 0, Tomcat8 is running 
    goto :acorp 

    :answer1 
    echo `find` had return code 1, Tomcat8 not running 
    rem code snippet to start the service here 
    goto :acorp 

    :answer2 
    rem dummy/debugging 
    echo `find` had return code 2: invalid switch is given 
    pause 

    :acorp 

Another approach: IF… ELSE …

Скобки могут использоваться для разделения команд по нескольким линиям. Это позволяет писать более сложными IF ... ELSE ... команды:

IF EXIST filename.txt (
    Echo deleting filename.txt 
    Del filename.txt 
) ELSE ( 
    Echo The file was not found. 
) 

При использовании скобки CMD оболочки будет расширяться [читать] все переменных в начале блока кода и использовать эти значения даже если переменные значение только что изменилось. Включение DelayedExpansion заставит оболочку читать переменные на начала каждой строки.

net start | find "Tomcat8" > nul 2>&1 
if %ERRORLEVEL%==1 (
    echo "Tomcat8 not running" 
    rem code snippet to start the service here 
) else (
    echo "Tomcat8 is running" 
) 
Смежные вопросы