Board logo

标题: [问题求助] [已解决]VBS如何直接得到某进程名的PID? [打印本页]

作者: eeemail    时间: 2016-11-26 22:42     标题: [已解决]VBS如何直接得到某进程名的PID?

本帖最后由 eeemail 于 2016-11-27 23:11 编辑
  1. Set w = GetObject("winmgmts:")
  2. Set p = w.ExecQuery("select * from win32_process where name='lsass.exe' ")
  3.   For Each i In p
  4. msgbox i.processID
  5. next
复制代码
这样可以得到PID,但是我想查询的程序限制只能有一个进程,所以不想用  For Each  In 来循环,想直接得到该进程名的pid,怎么写?

想得到类似下面这样的格式:
Set objSWbemObject = GetObject("winmgmts:Win32_Processor.DeviceID='cpu0'")
Wscript.echo "首枚CPU序列号:" & objSWbemObject.ProcessorId
作者: pcl_test    时间: 2016-11-26 23:52

进程名可以有多个相同的,不能用那种方式
……
msgbox i.processID
exit for
next
作者: eeemail    时间: 2016-11-27 19:48

回复 2# pcl_test
多谢,那我想取查询所得的集合中的第一个值怎么写?
作者: pcl_test    时间: 2016-11-27 19:57

回复 3# eeemail

2楼不是给了么
作者: eeemail    时间: 2016-11-27 20:03

回复 4# pcl_test

好吧,算我没说清楚,2楼尽管得到了第1个的,但我想要方法:如果该exe有8个进程,那我想取第5个进程的pid怎么写?谢谢
作者: pcl_test    时间: 2016-11-27 20:06

本帖最后由 pcl_test 于 2016-11-27 20:28 编辑

回复 5# eeemail

加个计数不就是么
For Each i In p
n=n+1
if n=5 then msgbox i.processID

next
作者: eeemail    时间: 2016-11-27 20:10

回复 6# pcl_test

不好意思,完全没有编程基础,只是工作上有些需要。
能否给出完整代码?
作者: eeemail    时间: 2016-11-27 20:13

回复 6# pcl_test


    另外,刚在bat去发了个类似的主题好像被删了,也请帮忙:
for /f "delims= " %%a in ('wmic process where "name='notepad.exe'" get processid ^|findstr "[0-9]"') do echo;%%a
pause
我想传递第一,三个pid给vbs,然后msgbox显示,怎么写?

0编程基础的玩这个伤不起啊
作者: pcl_test    时间: 2016-11-27 21:17

本帖最后由 pcl_test 于 2016-11-27 21:23 编辑

嗯,然而这里也不是帮你做事的地方,先学点基础再说
  1. @echo off
  2. for /f "tokens=2delims==" %%a in ('wmic process where "name='notepad.exe'" get processid /value ^|find "="') do set /a n+=1&call set #%%n%%=%%a
  3. echo;%#1%
  4. echo;%#3%
  5. pause
复制代码

作者: eeemail    时间: 2016-11-27 21:54

回复 9# pcl_test
十分感谢,因极少用到,所以实在无精力深究




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2