【问题标题】:Combine For /F with WMIC + WHERE clause + AND clause将 For /F 与 WMIC + WHERE 子句 + AND 子句组合
【发布时间】:2013-10-21 13:01:40
【问题描述】:

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

wmic service where (name="themes" and state="running") get

下面的代码不起作用:

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

【问题讨论】:

  • 单引号表示解析命令结束...??
  • = 是分隔符,应该转义
  • 非常感谢@npocmaka,但我试过了,还是不行
  • 我以前从未见过使用 AND 分句的 wmic 对 For 的语法处理,这对我来说很有趣!

标签: batch-file for-loop syntax wmic


【解决方案1】:

另一种选择:)

@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

复杂的 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

使用我的第一个代码示例中的语法需要转义 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

【讨论】:

    【解决方案2】:
    @echo off
    For /F "usebackq delims=" %%a in (`wmic service where 'name^="themes" and state^="running"' get`) do (
        echo %%a
    )
    

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

    【讨论】:

      【解决方案3】:

      你可以用单引号+双引号将完整的wmic命令括起来,那么你不需要转义任何东西

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

      【讨论】:

      • 是的,这两个解决方案都很棒,我只是标记了第一个回答的人的答案,但谢谢两位!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 2022-12-21
      • 2013-12-23
      • 2023-03-06
      • 2011-06-16
      相关资源
      最近更新 更多