【问题标题】:Capture full output of command in batch file (only capture first character)在批处理文件中捕获命令的完整输出(仅捕获第一个字符)
【发布时间】:2018-07-12 10:20:09
【问题描述】:

感谢nssm,我必须创建一个批处理文件来检查我的服务状态。我使用的命令是nssm status MyService,它返回SERVICE_STOPPEDSERVICE_RUNNING。我对批处理文件没有很多经验,所以我按照一些 SO 答案来实现我想要的,这是我的文件:

FOR /F "tokens=*" %%F IN ('nssm status MyService') DO (
SET var=%%F
)
ECHO %var%

但是当我回显输出时,我只能得到预期输出的第一个字符。

var 等于S

我尝试更改令牌和 delims 参数,但没有成功,它总是返回 S

我错过了什么?是 FOR /F 参数吗?或者我如何设置我的变量?

【问题讨论】:

  • 如果该命令所做的只是输出SERVICE_STOPPEDSERVICE_RUNNING,那么您使用的代码将不会截断输出。
  • NSSM 可以是 Unicode。你为什么不使用 Windows 命令。 NSSM 不是一个服务控制程序,即使它也可以做到这一点。见for /f "usebackq tokens=2 delims=," %A in (wmic service where "name='rpcss'" get state /format:csv) Do echo %A
  • @Squashman 当我在命令行中运行nssm status MyService 时,它返回SERVICE_RUNNING,是否可以在命令行和批处理文件中运行时产生不同的输出?
  • @CatCat 我使用 NSSM 将批处理文件作为服务运行,所以当它崩溃时它会重新启动,你给我的代码总是返回给我RUNNING
  • Rpcss 一直在运行。否则一切都会崩溃。

标签: windows batch-file cmd


【解决方案1】:

这就是我解决这个问题的方法,问题可能来自 NSSM 命令行,而不是我使用 SC 命令来查询我的服务,如提到的@Squashman

set list=service1 service2
for %%a in (%list%) do (
  FOR /F "tokens=4" %%F IN ('sc query %%a ^| find "STATE     "') DO (
    IF %%F NEQ RUNNING (
      nssm start %%a
    )
  )
)

【讨论】:

    【解决方案2】:
    for /f "usebackq tokens=2 delims=," %A in (`wmic service where "name='rpcss'" get state /format:csv`) Do echo %A
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多