
@echo off
+ F3 {1 u' B( H; Wcolor 1f
( z% x* _% h+ A& h0 v/ U/ YTitle XP端口-进程查询 6 O, E4 H: r! ]4 W5 d/ T; I% {( @* O
setlocal enabledelayedexpansion
. d5 O" o0 q6 q( g, B7 k+ pecho ╔- -╗
$ d: x* g- e- Xecho 本机开放的端口及使用该端口的进程
4 L0 l0 z# m( Z. x) |echo ╚- -╝
. S. x2 Q9 F, ~* S. Becho ------------------------------------
" k% U2 G7 A' l( `. K# uecho 端口号 进程名称
- |' \# b4 M- g3 o9 L+ H. |- cECHO TCP协议:
4 \# ~% ?: ]1 Q$ y) B::利用netstat命令找出使用TCP协议通信的端口,并将结果分割; 6 w! U) C; S; K" o) h! D+ H. V
::将第二个参数(IP加端口)传给%%i,第五个参数(PID号)传给%%j; ; j1 L4 n# D# N' _4 R
for /F "usebackq skip=4 tokens=2,5" %%i in (`"netstat -ano -p TCP"`) do ( 3 G0 J8 U$ Z6 F; B% C: `* v8 y5 K
call :Assoc %%i TCP %%j
' [+ b5 o$ J0 d# p: ] O, F echo !TCP_Port! !TCP_Proc_Name! % M0 a/ r! ^6 w Q
)
4 J4 k, A* @5 q- q) dECHO UDP协议: 8 J$ U; \$ Z! G9 p+ _5 e
for /F "usebackq skip=4 tokens=2,4" %%i in (`"netstat -ano -p UDP"`) do ( 1 x- s8 Y* U1 G( }
call :Assoc %%i UDP %%j : q/ Y: k5 q3 d- t: t
echo !UDP_Port! !UDP_Proc_Name!
/ v" M5 Q# r5 Y* j% H" R& j/ S) + \+ }+ V! g/ L8 `6 [( I, e- e7 q. A
echo 按任意键退出
* f# O* B% N, Lpause>nul 2 i! r" Y- w$ V8 c
:Assoc
# Y( U Y$ K+ i+ E- z; @# G::对%1(第一个参数)进行分割,将第二个参数传给%%e。在本程序中,%1即为上面的%%i(形式为:IP:端口号)
# v' Y; U- \6 q+ n* z5 S8 yfor /F "tokens=2 delims=:" %%e in ("%1") do ( 0 {) H3 j' i+ C) l% @7 s
set %2_Port=%%e * V1 A, H6 h9 p, s1 b5 s
) 8 Z9 W: t( n) m a. U
:: 查询PID等于%3(第三个参数)的进程,并将结果传给变量?_Proc_Name,?代表UDP或者TCP; & U7 ^3 p/ o; {$ V, _+ q# ~
for /F "skip=2 usebackq delims=, tokens=1" %%a in (`"Tasklist /FI "PID eq %3" /FO CSV"`) do (
0 I' q4 v, n3 H( ]9 l& o/ u; ]+ g ::%%~a表示去掉%%a外面的引号,因为上述命令的结果是用括号括起来的。 7 D3 Y1 j. j( u5 Q" m4 _2 Y
set %2_Proc_Name=%%~a
& m, E0 P& n$ ?( H ) |
|