标题: [系统相关] 查看指定进程PID标识的批处理如何改进? [打印本页]
作者: tianya1988 时间: 2012-8-19 23:57 标题: 查看指定进程PID标识的批处理如何改进?
新手刚学不久 看了下《批处理For语句从入门到精通(完整版)》 头都看大 弄了个查看指定进程PID标识的批处理- @echo off
- title 进程标识查看器 by tianya1988
- :loop
- cls
- mode con cols=65 lines=20
- echo =============================================================
- echo * *
- echo = 本工具用来查询指定进程的PID标识,请在下面输入 =
- echo = 您需要查询的进程,比如您想查询QQ进程的PID,那 =
- echo + 么就在下面输入QQ.exe(不区分大小写)。 +
- echo = =
- echo = =
- echo * *
- echo =============================================================
- set /p ImageName=请输入你需要查询的进程映像名:
- :ImageName_Check
- set check_flag=0
- for /f %%a in ('tasklist') do (
- if /i "%%a"=="%ImageName%" set check_flag=1
- )
- if /i %check_flag%==0 (
- echo 您输入的进程名不存在,按任意键返回重新输入
- pause>nul
- goto loop
- )
- :result
- for /f "tokens=2" %%a in ('tasklist ^| find /i "%ImageName%"') do (
- echo %ImageName%的进程标识^(PID^)为:%%a
- )
- echo;
- echo;
- echo ============================================================
- echo * 按1继续查看其他进程PID,按任意键退出程序 *
- echo ============================================================
- set /p choice=请选择下一步操作:
- if %choice%==1 goto loop
- 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 按你说的执行效果都一样啊 程序都退出的啊 也就是我想要的结果
优化了下代码,添加计算进程个数的功能- @echo off
- Setlocal enabledelayedexpansion
- title 进程标识查看器 by tianya1988
- :loop
- cls
- mode con cols=65 lines=32
- echo =============================================================
- echo * *
- echo = 本工具用来查询指定进程的PID标识,请在下面输入 =
- echo = 您需要查询的进程,比如你想查询QQ进程的PID,那 =
- echo + 么就在下面输入QQ.exe(不区分大小写)。 +
- echo = =
- echo = ----by tianya1988 =
- echo * *
- echo =============================================================
- set /p ImageName=请输入你需要查询的进程映像名:
- if "%ImageName%"=="" goto loop
- :ImageName_Check
- set check_flag=0
- for /f %%a in ('tasklist') do (
- if /i "%%a"=="%ImageName%" set check_flag=1
- )
- if /i "%check_flag%"=="0" (
- echo;
- echo;
- echo *************************************************
- echo * 您输入的进程名不存在,按任意键返回重新输入! *
- echo *************************************************
- pause>nul&set ImageName=<nul&set choice=<nul&goto loop
- )
- :result
- echo ==============================================================
- echo * 你要查询的进程映像名为:%ImageName%
- echo ==============================================================
- set /a num=0
- for /f "tokens=2" %%a in ('tasklist ^| find /i "%ImageName%"') do (
- set /a num+=1
- echo 第!num!个 %ImageName%的进程标识^(PID^)为:%%a
- )
- echo ##############################################################
- echo 共有%num%个%ImageName%进程
- echo =============================================================
- echo * 按1继续查看其他进程PID,按其他任意键退出程序 *
- echo =============================================================
- echo;
- echo *************************************************************
- set /p choice=请选择下一步操作:
- if %choice%==1 set ImageName=<nul&set choice=<nul&goto loop
- exit
复制代码
- 我做这个批处理的初衷是有人希望查看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 |