【问题标题】:Output of WMIC command in variable变量中 WMIC 命令的输出
【发布时间】:2017-03-05 07:12:01
【问题描述】:
for %%f in ('wmic service where 'name like 'Steam Client%%'") do set Service=%%f
echo %Service%

我做错了什么?

【问题讨论】:

  • 输出是什么,你的期望是什么?
  • 我正在寻找批处理文件以返回服务名称,它会询问我是否停止/启动服务。

标签: batch-file


【解决方案1】:
for /F "tokens=*" %%f in ('wmic service where "name like "Steam%%"" get Name ^| findstr /V /R "^$"') do set Service=%%f
echo %SERVICE%

输出

Steam Client Service

代码中的错误:

  • 没有在 for 循环中使用 /F 开关
  • 混合使用单引号和双引号。
  • 没有使用get 子句指定要获取的特定属性
  • 没有使用findstr 过滤额外的输出

【讨论】:

【解决方案2】:

我就是这样做的。

第二个 for 循环从输出中去除一些有问题的字符,与FindStr 示例的方式非常相似,只是更快。然后我实现一个Call 来去除填充返回的Get 字符串末尾的尾随空格。

@Echo Off
For /F "Skip=1 Delims=" %%A In (
    '"WMIC Service Where (Name Like 'Steam%%') Get Name"'
) Do For /F "Delims=" %%B In ("%%A") Do Call :Sub %%B
Echo("%Service%"
Timeout -1
GoTo :EOF

:Sub
Set "Service=%*"
GoTo :EOF

以上代码完全未经测试,因为我使用的是安卓设备。

【讨论】:

  • 这更像是:D :D
【解决方案3】:

('wmic service where 'name like 'Steam Client%%'") 中的最后一个括号不应该是“不是”吗?无论如何,我从未尝试过使用 wmic 服务,只有 wmic win32_localtime 看起来像这样:FOR /F %%F IN ('wmic path win32_localtime get dayofweek^|Findstr [0-6]') DO SET DOW=%%F

编辑:我注意到你在这里出错的几个地方,至少在我能理解的部分。如果您希望代码的输出由 FOR 语句评估,则需要 /F 在 FOR 前面和变量之前。您通常还需要用单引号 (') 开始和结束包含命令的括号。像这样:for /f %%f in ('wmic service where name like "Steam Client%%"') do set Service=%%f echo %Service%

对于 WMIC 查询的任何帮助this 可能会有所帮助

希望这会有所帮助。

【讨论】:

  • 我希望批处理文件找到服务的名称并将其显示在屏幕上。感谢您的快速回复。
  • 您是否注意到此答案的第一个相关部分?您应该在括号内的命令需要以单引号 (') 结束(和开始)。然后是第二部分,我展示了我使用 for 命令所做的操作以使用命令。如果您在语句中使用命令,则需要在 FOR 前面加上 /F。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
相关资源
最近更新 更多