Batch file WMIC命令在变量中的输出

Batch file WMIC命令在变量中的输出,batch-file,Batch File,我做错了什么?不是中的最后一个括号('wmic service where'像'Steam Client%%'这样的名称)应该是'not'?在任何情况下,我从未尝试使用wmic服务,只有wmic win32_localtime看起来像这样:FOR/F%%F In('wmic path win32_localtime get dayofweek^ | Findstr[0-6])设置DOW=%F 编辑:我注意到这里有几个地方出了问题,至少在我能理解的部分。如果希望代码的输出由FOR语句计算,则需要/

我做错了什么?

不是
中的最后一个括号('wmic service where'像'Steam Client%%'这样的名称)
应该是'not'?在任何情况下,我从未尝试使用wmic服务,只有wmic win32_localtime看起来像这样:
FOR/F%%F In('wmic path win32_localtime get dayofweek^ | Findstr[0-6])设置DOW=%F

编辑:我注意到这里有几个地方出了问题,至少在我能理解的部分。如果希望代码的输出由FOR语句计算,则需要/F在FOR前面和变量前面。您通常还需要以单引号(')开始和结束包含命令的方括号。类似于:
for/f%%f in('wmic服务,名称如“Steam Client%%”)do set service=%%f
回显%Service%

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

希望这有帮助

for %%f in ('wmic service where 'name like 'Steam Client%%'") do set Service=%%f
echo %Service%
输出

for /F "tokens=*" %%f in ('wmic service where "name like "Steam%%"" get Name ^| findstr /V /R "^$"') do set Service=%%f
echo %SERVICE%
代码中的错误:

  • 未将
    /F
    开关与for循环一起使用
  • 混合使用单引号和双引号
  • 未使用
    get
    子句指定要获取的特定属性
  • 未使用
    findstr
    • 我就是这样做的

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

      @Echo关闭
      对于/F“Skip=1 Delims=“%%A In(
      “‘WMIC服务,其中(名称如‘Steam%%’)获取名称””
      )为/F“Delims=“%%B In”(“%%%A”)执行的Do调用:Sub%%B
      回显(“%Service%”)
      超时-1
      后藤:EOF
      :Sub
      设置“服务=%*”
      后藤:EOF
      

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

      输出是什么,您的期望是什么?我正在寻找批处理文件以返回我的服务名称,它将询问我是否停止/启动服务。我希望批处理文件找到服务名称并显示在屏幕上。感谢您的快速响应。你注意到这个答案的第一个相关部分了吗?你应该在括号内有命令的地方需要用一个引号(')结束(和开始)。然后是第二部分,我展示了我使用for命令使用命令的过程。如果在语句中使用命令,则在for前面需要/F。这个输出“Steam Client Service”给了我尾随空格。比如“Steam Client Service(spaces)”,更像是:D:D
      Steam Client Service