将For/F与WMIC + WHERE子句+ AND子句组合使用

Ele*_*ios 10 syntax for-loop batch-file wmic

当包含在FOR脚本中的命令中时,如何编写WMIC命令?

wmic service where (name="themes" and state="running") get
Run Code Online (Sandbox Code Playgroud)

以下代码不起作用:

For /F %%a in (
    'wmic service where ^("name='themes'" and "state='running'"^) get'
) do (
    echo %%a
)
Run Code Online (Sandbox Code Playgroud)

npo*_*aka 11

@echo off
For /F "usebackq delims=" %%a in (`wmic service where 'name^="themes" and state^="running"' get`) do (
    echo %%a
)
Run Code Online (Sandbox Code Playgroud)

这个适用于我.我使用usebackq选项没有问题'和替代wmic语法 - '而不是括号.


dbe*_*ham 11

又一个选择:)

@echo off
for /f "delims=" %%A in (
  'wmic service where "name='themes' and state='running'" get'
) do for /f "delims=" %%B in ("%%A") do echo %%B
Run Code Online (Sandbox Code Playgroud)

复杂WHERE子句必须引用或括号.额外的内部'不会导致FOR/F出现问题.

我添加了一个额外的FOR/F来去除附加到每行末尾的不需要的回车,作为FOR/F将WMIC unicode输出转换为ANSII的工件.如果没有额外的FOR/F,则会有一个额外的行,仅包含一个回车结果ECHO is off..

我想我更喜欢jeb的版本,因为它消除了整个命令中的转义需求,尽管我可能会在WHERE子句中使用单引号.例如:

@echo off
for /f "delims=" %%A in (
  '"wmic service where (name='themes' and state='running') get name, pathName"'
) do for /f "delims=" %%B in ("%%A") do echo %%B
Run Code Online (Sandbox Code Playgroud)

使用我的第一个代码示例中的语法需要转义GET子句中的逗号:

@echo off
for /f "delims=" %%A in (
  'wmic service where "name='themes' and state='running'" get name^, pathName'
) do for /f "delims=" %%B in ("%%A") do echo %%B
Run Code Online (Sandbox Code Playgroud)


jeb*_*jeb 10

您可以将完整的wmic命令括在单+双引号中,然后您不需要转义任何内容

FOR /F "delims=" %%a in ('"wmic service where (name="themes" and state="running") get"') do (
  echo %%a
)
Run Code Online (Sandbox Code Playgroud)