在批处理脚本中捕获tabadmin status命令的输出

时间:2018-06-25 15:09:17

标签: batch-file cmd tableau

我想在批处理脚本中捕获tabadmin status命令的输出,并针对已关闭的服务打印不同的消息。 例如:tabadmin status的输出--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 :(得分:0)

该批处理代码如何?

@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的{​​{3}},将其分配给指定循环变量B之后的下一个循环变量。

最后一个子字符串是)之后到行尾的所有内容,因为*之后3之后tokens=1,3*被分配给循环变量{{1 }}。

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。

  • C
  • echo /?
  • for /?