Board logo

标题: [系统相关] 查看指定进程PID标识的批处理如何改进? [打印本页]

作者: tianya1988    时间: 2012-8-19 23:57     标题: 查看指定进程PID标识的批处理如何改进?

新手刚学不久 看了下《批处理For语句从入门到精通(完整版)》 头都看大  弄了个查看指定进程PID标识的批处理
  1. @echo off
  2. title 进程标识查看器  by  tianya1988
  3. :loop
  4. cls
  5. mode con cols=65 lines=20
  6. echo   =============================================================
  7. echo   *                                                           *
  8. echo   =       本工具用来查询指定进程的PID标识,请在下面输入       =
  9. echo   =       您需要查询的进程,比如您想查询QQ进程的PID,那       =
  10. echo   +       么就在下面输入QQ.exe(不区分大小写)。              +
  11. echo   =                                                           =
  12. echo   =                                                           =
  13. echo   *                                                           *
  14. echo   =============================================================
  15. set /p ImageName=请输入你需要查询的进程映像名:
  16. :ImageName_Check
  17. set check_flag=0
  18. for /f %%a in ('tasklist') do (
  19. if /i "%%a"=="%ImageName%" set check_flag=1
  20. )
  21. if /i %check_flag%==0 (
  22. echo 您输入的进程名不存在,按任意键返回重新输入
  23. pause>nul
  24. goto loop
  25. )
  26. :result
  27. for /f "tokens=2" %%a in ('tasklist ^| find /i "%ImageName%"') do (
  28. echo   %ImageName%的进程标识^(PID^)为:%%a
  29. )
  30. echo;
  31. echo;
  32. echo   ============================================================
  33. echo   *               按1继续查看其他进程PID,按任意键退出程序   *
  34. echo   ============================================================
  35. set /p choice=请选择下一步操作:
  36. if %choice%==1 goto loop
  37. exit
复制代码
初步验证了下没什么大问题, 请高人指教, 感觉效率不是很高
:ImageName_Check那段,用了个for循环检测输入的进程名是否存在,不知道能不能直接嵌入到:result下的那个for循环里
作者: canyuexiaolang    时间: 2012-8-20 09:21

本帖最后由 canyuexiaolang 于 2012-8-20 09:22 编辑

不错,赞一个

if "%choice%"=="1" goto loop
一定要加引号
作者: tianya1988    时间: 2012-8-20 11:53

回复 2# canyuexiaolang
为什么????
我看到过很多不同的写法  "%choice%"=="1" "%choice%==1" '%choice%'=='1'  '%choice%==1' 都有什么区别吗
作者: canyuexiaolang    时间: 2012-8-20 14:41

回复 3# tianya1988

在你的命令下直接输入回车你看看
作者: tianya1988    时间: 2012-8-20 18:58

本帖最后由 tianya1988 于 2012-8-20 19:01 编辑

回复 4# canyuexiaolang
还是没明白哪里有不同?      试了下无论使用if "%choice%"=="1"  还是 if %choice%==1 按你说的执行效果都一样啊   程序都退出的啊  也就是我想要的结果
优化了下代码,添加计算进程个数的功能
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. title 进程标识查看器  by   tianya1988
  4. :loop
  5. cls
  6. mode con cols=65 lines=32
  7. echo   =============================================================
  8. echo   *                                                           *
  9. echo   =       本工具用来查询指定进程的PID标识,请在下面输入       =
  10. echo   =       您需要查询的进程,比如你想查询QQ进程的PID,那       =
  11. echo   +       么就在下面输入QQ.exe(不区分大小写)。              +
  12. echo   =                                                           =
  13. echo   =                                 ----by tianya1988         =
  14. echo   *                                                           *
  15. echo   =============================================================
  16. set /p ImageName=请输入你需要查询的进程映像名:
  17. if "%ImageName%"=="" goto loop
  18. :ImageName_Check
  19. set check_flag=0
  20. for /f %%a in ('tasklist') do (
  21. if /i "%%a"=="%ImageName%" set check_flag=1
  22. )
  23. if /i "%check_flag%"=="0" (
  24. echo;
  25. echo;
  26. echo        *************************************************
  27. echo        *  您输入的进程名不存在,按任意键返回重新输入! *
  28. echo        *************************************************
  29. pause>nul&set ImageName=<nul&set choice=<nul&goto loop
  30. )
  31. :result
  32. echo  ==============================================================
  33. echo  *     你要查询的进程映像名为:%ImageName%
  34. echo  ==============================================================
  35. set /a num=0
  36. for /f "tokens=2" %%a in ('tasklist ^| find /i "%ImageName%"') do (
  37. set /a num+=1
  38. echo        第!num!个 %ImageName%的进程标识^(PID^)为:%%a
  39. )
  40. echo  ##############################################################
  41. echo                     共有%num%个%ImageName%进程         
  42. echo   =============================================================
  43. echo   *       按1继续查看其他进程PID,按其他任意键退出程序        *
  44. echo   =============================================================
  45. echo;
  46. echo   *************************************************************
  47. set /p choice=请选择下一步操作:
  48. if %choice%==1 set ImageName=<nul&set choice=<nul&goto loop
  49. exit
复制代码
  1. 我做这个批处理的初衷是有人希望查看qq好友的IP,原本是打算结合netstat -ano命令,通过比对PID值来查找IP值的,可是发现QQ在只进行文字聊天时貌似只用UDP连接方式的,据说是只能查到腾讯的服务器IP,只有在和好友进行文件传输时才和对方建立连接。
复制代码

作者: tianya1988    时间: 2012-8-20 20:06

找到点蛛丝马迹:http://www.bathome.net/viewthrea ... 1&authorid=2790




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