[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] [已解决]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

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

TOP

本帖最后由 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
复制代码
1

评分人数

TOP

回复 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编程基础的玩这个伤不起啊

TOP

回复 6# pcl_test

不好意思,完全没有编程基础,只是工作上有些需要。
能否给出完整代码?

TOP

本帖最后由 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
1

评分人数

TOP

回复 4# pcl_test

好吧,算我没说清楚,2楼尽管得到了第1个的,但我想要方法:如果该exe有8个进程,那我想取第5个进程的pid怎么写?谢谢

TOP

回复 3# eeemail

2楼不是给了么

TOP

回复 2# pcl_test
多谢,那我想取查询所得的集合中的第一个值怎么写?

TOP

进程名可以有多个相同的,不能用那种方式
……
msgbox i.processID
exit for
next

TOP

返回列表