【问题标题】:Error :Parse output of a command in windows command line file错误:在 Windows 命令行文件中解析命令的输出
【发布时间】:2012-10-29 14:18:36
【问题描述】:

我正在尝试在命令行脚本中解析命令的输出。作为开始,我必须首先在变量中捕获命令的输出(我猜)。所以这是我到目前为止所写的:

FOR /F "tokens=2* delims=    " %%A IN ('wmic process where(name="javaw.exe") get commandline') DO SET VAR=%%B
echo %VAR%

wmic process where(name="javaw.exe") get commandline 是我要执行并保存输出的命令。 但是执行此操作时出现以下错误。

get was unexpected at this time

任何想法为什么错误。以及将输出存储在变量中后如何继续。我在输出中寻找一个特定的词说 "XYZ",如果那个词在那里,我想显示一个窗口弹出窗口。

提前感谢您的帮助。

【问题讨论】:

  • 是批处理脚本或者是在cmd行执行,但是命令行脚本不存在

标签: windows parsing command-line batch-file


【解决方案1】:

它给您错误的原因是因为for 循环中的第一个) 有效地结束了循环,然后get 命令被单独处理,这是无法识别的。

您需要使用插入符号^ 转义括号和=

FOR /F "tokens=2* delims=    " %%A IN ('wmic process where^(name^="javaw.exe"^) get commandline') DO SET VAR=%%B

希望对你有帮助

【讨论】:

  • 不。现在我得到“此时 B 出乎意料”!!
  • 你是从命令行还是批处理文件运行?
  • 那么你需要在for循环中使用单个%,你对批处理文件使用双%%%A%B,而不是 %%A%%B
  • +1 - 但实际上第二个( 不会引起问题,也不需要转义。这是导致问题的第一个),需要按照您的说明进行转义。
  • @dbenham 谢谢,现在修好了:)
【解决方案2】:

您需要更改语法,但即使这样您也不会得到想要的结果,因为 wmic 通常响应不止一行。

setlocal EnableDelayedExpansion
FOR /F "tokens=* delims=" %%A IN (
    '"wmic process where(name="javaw.exe") get commandline"') DO (
     set "line=%%A"
     if "!line:XYZ=!" NEQ "!line!" (
        echo The line contains XYZ
     )
)

并且将 delims 设置为空格会在第一个空格处分割行,即使这是在 javaw.exe 的路径中。

【讨论】:

  • 我可以直接在输出中搜索字符串而不将其保存在变量中吗?
  • 我添加了一个在 WMIC 输出的每一行中搜索 XYZ 的解决方案
  • 好的。假设我将命令更改为“wmic process where (name="javaw.exe") get commandline | find "XYZ"。如果有的话,输出中只会有一个结果[我知道]。现在我该怎么办?我的意思是如何检查输出的长度等如果长度大于零显示弹出窗口..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 2017-09-08
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多