我正在尝试获取由另一个程序启动的可执行文件的命令行参数。
我尝试了this回答中提到的命令,但我无法理解语法:(
我正在尝试获取进程的命令行参数,我有PID&进程名称,在这种情况下,我正在尝试获取ping命令的参数,我用它来测试命令......
提前致谢:)
答案 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"
......这样你就不会捕捉到你变量中任何看不见的背叛。