使用wmic将参数传递给可执行文件

时间:2015-09-16 11:50:04

标签: command-line-arguments wmic command-line-parsing

我正在尝试获取由另一个程序启动的可执行文件的命令行参数。

我尝试了this回答中提到的命令,但我无法理解语法:(

我正在尝试获取进程的命令行参数,我有PID&进程名称,在这种情况下,我正在尝试获取ping命令的参数,我用它来测试命令......

提前致谢:)

1 个答案:

答案 0 :(得分:1)

试试这个:

wmic process where "name='ping.exe'" get commandline /format:list

或者如果您更喜欢按PID查询:

wmic process where "processid='NNNN'" get commandline /format:list

wmic使用名为WQL的查询语言,类似于SQL。您可以使用wmic process where "name like 'ping%'" get commandline之类的通配符(但请务必将批处理脚本中的%%加倍),改变输出样式(列表,csv,甚至html)和其他魔法。有关详细信息,请参阅命令行中的wmic /?

如果要将任何命令的输出捕获到变量,请使用for /f循环。 cmd控制台中的help for以获取更多信息。在cmd控制台中尝试此操作:

for /f "delims=" %I in ('wmic process where "name='ping.exe'" get commandline /format:list ^| find "="') do set "%I"

你会注意到一些非常奇怪的东西。该命令的输出类似于:

  

<强>&#34; \ Users \ username&gt; set&#34; CommandLine = ping -n 60 localhost

结束引号会在该行的开头处打印出来!这不奇怪吗?这是因为WMI查询结果是用UCS-2 LE编码的,而不是ANSI。

我喜欢使用的一种解决方法是使用/format:csv并在查询中添加一次性列。

从批处理脚本中:

for /f "tokens=2 delims=," %%I in (
    'wmic process where "name='ping.exe'" get commandline^,status /format:csv'
) do set "commandline=%%I"

......这样你就不会捕捉到你变量中任何看不见的背叛。