如果在脚本中的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
)
答案 0 :(得分:11)
@echo off
For /F "usebackq delims=" %%a in (`wmic service where 'name^="themes" and state^="running"' get`) do (
echo %%a
)
这个适用于我。我使用usebackq
选项对'
和替代wmic语法 - '
而不是括号没有任何问题。
答案 1 :(得分: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
复杂的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 :(得分:10)
你可以用单引号和双引号括起完整的wmic命令,然后你不需要逃避任何事情
FOR /F "delims=" %%a in ('"wmic service where (name="themes" and state="running") get"') do (
echo %%a
)