Захватить вывод команды состояния tabadmin в пакетном скрипте - PullRequest
0 голосов
/ 25 июня 2018

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

'Tableau Server Data Engine' (5980) is running.
'Tableau Server Coordination Service 0' (7528) is running.
'Tableau Server Search and Browse 0' (10172) is running.
'Tableau Server Tabadmin Service 0' (4788) is running.
'Tableau Server Application Server 0' (9876) is running.

Я хочу знать все службы, которые не запущены, и распечатать их.

1 Ответ

0 голосов
/ 26 июня 2018

А как насчет этого пакетного кода?

@echo off
for /F "tokens=1,3* delims='()" %%A in ('tabadmin.exe status --verbose') do (
    if "%%C" == " is running." (
        echo "%%A" is running with identifier %%B.
    ) else (
        echo "%%A" is not running.
    )
)

Команда FOR выполняет командную строку tabadmin.exe status --verbose в отдельном командном процессе в фоновом режиме, который начинается с cmd /C, и захватывает весь выводзаписывается для обработки STDOUT .

Затем FOR обрабатывает захваченный вывод построчно с игнорированием пустых строк и строк, начинающихся с точки с запятой, которых нет в захваченном выводе.

Строка разбивается на подстроки (токены) с использованием указанных разделителей '().

Первая подстрока между ' представляет интерес и поэтому ссылается на tokens=1.Он присваивается указанной переменной цикла A.

Вторая подстрока - это просто пробел между ' и (.Этот пробел не нужен и по этой причине игнорируется.

Третья подстрока - это номер идентификатора в круглых скобках.Эта строка представляет интерес и поэтому на нее ссылается опция 3 в tokens=.Он присваивается следующей переменной цикла после указанной переменной цикла A в соответствии с ASCII-таблицей , которая является переменной цикла B.

И последняя подстрока - это все после ) upдо конца строки из-за * после 3 в конце tokens=1,3*, который присвоен переменной цикла C.

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

  • echo /?
  • for /?
  • if /?
...