2012-12-24 64 views

回答

0
@echo off 
set portnumber=? 

FOR /F "tokens=1,2,3,4,* delims= " %%a in ('netstat -ano') do call :handleline %%a %%b %%c %%d %%e 

goto :eof 

:handleLine 
call :portcheck %1 %2 %2 %4 %5 

rem you can have your check here 
rem if %portnumber%==7001 do whatever 
echo pid %4 uses port %portnumber% 

goto :eof 

:portcheck 
set prot=%1 
set ipandport=%2 
set pid=%4 

set pn1=%ipandport:~-1% 
set pn2=%ipandport:~-2% 
set pn3=%ipandport:~-3% 
set pn4=%ipandport:~-4% 
set pn5=%ipandport:~-5% 

if !%pn2:~0,1%!==!:! set portnumber=%pn1% & goto :bailout 
if !%pn3:~0,1%!==!:! set portnumber=%pn2% & goto :bailout 
if !%pn4:~0,1%!==!:! set portnumber=%pn3% & goto :bailout 
if !%pn5:~0,1%!==!:! set portnumber=%pn4% & goto :bailout 
set portnumber=%pn5% 
:bailout 

goto :eof 
+0

喜實際上我想通過在結果,我做 '的netstat -ano後得到比較端口號來獲得PID |找到7001' 此代碼返回 'C:\ Users \ sahil.makhija> netstat -ano | FINDSTR 7001' 'TCP 0.0.0.0:7001 0.0.0.0:0 LISTENING 5148' 'TCP [::]:7001 [:]:0 LISTENING 5148' ,所以我不得不作出一些改變你的代碼幫了我。 ('netstat -ano')do if %% b == 0.0.0.0:7001 set myvar = 這是新代碼 'FOR/F「標記= 1,2,5 * delims =」%% a %% c echo%myvar% pause' 這會將我的PID存儲到myvar中。 –

2

特殊字符如|必須在IN()子句內轉義或引用。請注意,不需要TOKENS = 1選項 - 這是默認值。

您可以使用

for /f "delims=" %%A in ('netstat -ano ^| findstr 7001') do set myVar=%%A 

for /f "delims=" %%A in ('"netstat -ano | findstr 7001"') do set myVar=%%A 
+0

由於@dbenham 我相應地修改我的代碼和得到了我的ANS 這是代碼 'FOR/F 「令牌= 1,2 * delims =」 %%一個在( 'netstat的-ano^| FINDSTR 7001' )do set myVar = %% a echo%myvar:〜-4% pause' –