Board logo

标题: [其他] [已解決]批处理start程序后如何获取这个PID并taskkill 这个PID [打印本页]

作者: qaz123654    时间: 2009-8-21 11:49     标题: [已解決]批处理start程序后如何获取这个PID并taskkill 这个PID

例如:start iexplore 后获取这个IE的PID值
用 tasklist /fi "IMAGENAME eq iexplore.exe" 可以判断PID

但是经常会开多个IE ,如何判断那个PID是start iexplore 的
然后用 taskkill  /f /pid     结束这个进程
taskkill /f /im iexplore.exe是不能用的会关闭掉所有IE进程。

自己没思路,拜托各位了,谢谢~~

[ 本帖最后由 qaz123654 于 2009-8-21 13:01 编辑 ]
作者: defanive    时间: 2009-8-21 12:19

通过窗口标题判断,但是也会有重复的时候。。。

最好的办法就是用vbs,可以直接返回pid。。。
作者: Lumiere    时间: 2009-8-21 12:27

  1. @echo off
  2. for /f "tokens=2" %%a in ('tasklist^|findstr /i "iexplore.exe"') do echo %%a>>keep.txt
  3. start "" iexplore.exe
  4. for /f "tokens=2" %%a in ('tasklist^|findstr /i "iexplore.exe"') do echo %%a>>com.txt
  5. for /f %%a in (com.txt) do findstr %%a keep.txt||taskkill /pid:%%a
  6. pause
复制代码

[ 本帖最后由 Lumiere 于 2009-8-21 12:40 编辑 ]
作者: zqz0012005    时间: 2009-8-21 12:31

start 没有这个功能,只在启动命令行程序(如cmd、ping、bat)时可以指定窗口标题。
可以用wmic运行程序再用for截取pid
  1. @echo off
  2. for /f "tokens=1,2 delims==; " %%a in ('wmic process call create '"C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE" "http://www.bathome.net"'^|find /i "ProcessId"') do set %%a=%%b
  3. echo %ProcessId%
  4. pause
复制代码

作者: qaz123654    时间: 2009-8-21 12:38     标题: 回复 2楼 的帖子

用VBS?
能不能给个代码看下,谢谢
作者: zqz0012005    时间: 2009-8-21 12:42     标题: 回复 5楼 的帖子

  1. set ws=CreateObject("WScript.Shell")
  2. set oexec=ws.exec("C:\Program Files\Internet Explorer\IEXPLORE.EXE")
  3. wsh.echo oexec.processid
复制代码

作者: cjiabing    时间: 2009-8-21 12:46

批处理并非万能的。
隔时间扫描IE进程,记录IE的PID,当有新的PID时把它挑选出来。
作者: cjiabing    时间: 2009-8-21 12:52

  1. @echo off
  2. for /f "skip=3 tokens=2" %%a in ('tasklist /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "imagename eq iexplore.exe"') do echo %
  3. %a >>tasklist0.txt
  4. start "" iexplore.exe
  5. for /f "skip=3 tokens=2" %%a in ('tasklist /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "imagename eq iexplore.exe"') do echo %
  6. %a >>tasklist1.txt
  7. for /f "skip=3 delims=*" %%a in ('fc tasklist0.txt  tasklist1.txt') do (ping n 5 127.0.1>nul & taskkill /pid  %%a)
  8. del tasklist0.txt,tasklist1.txt
  9. pause
复制代码

[ 本帖最后由 cjiabing 于 2009-8-21 13:34 编辑 ]
作者: qaz123654    时间: 2009-8-21 12:58

还是斑竹厉害啊,
谢谢各位了
作者: Seter    时间: 2009-9-22 20:35

原帖由 cjiabing 于 2009-8-21 12:46 发表
批处理并非万能的。
隔时间扫描IE进程,记录IE的PID,当有新的PID时把它挑选出来。

居然真这么做了...强悍的...这效率是不是低了点....
作者: bluewing009    时间: 2010-11-2 08:44

启动前获取一次,启动后立即获取一次,判断不同即可。除非你的系统又同时启动了一个………………




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