Board logo

标题: [求助] 字符串筛选 [打印本页]

作者: knitter     时间: 2009-4-22 04:12    标题: [求助] 字符串筛选
说明: 最近在使用InstallAnywhere打包J2EE应用程序,在安装过程中需要检查用户设置的服务端口是否已经被占用,所有用如下指令查询:(这里假设用户输入80作为端口) netstat -an -p TCP | find "80" 将会返回如下结果: Proto Local Address Foreign Address State TCP 192.168.2.142:80 72.14.203.80:88 CLOSE_WAIT 由于 Foreign Address 对应的字段相关的端口是远端服务器监听端口,对服务没有影响,所以,我想: 只截取 Local Address 中相应的端口,例如上面的192.168.2.142:80 中对应的80 其它的选择: 或者有什么其它的办法能 "只获取本机开放了的TCP端口",这样就不用进行上面的截取了。 P.S 由于以上操作都是在打包程序安装之前进行的操作,所有不能使用自定义的第三方程序,只能使用Windows系统自带的程序实现! 请指教!

作者: freeants001     时间: 2009-4-22 04:32
@echo off
for /f "tokens=1,2" %%i in ('netstat -an -p TCP^|find "80"') do @echo %%j
pause

作者: knitter     时间: 2009-4-22 04:51    标题: 不行哦!
首先,感谢你的帮助,不过没有完全实现我的要求: 假设有这种情况: Proto Local Address Foreign Address State TCP 192.168.2.80:88 72.14.203.128:8482 CLOSE_WAIT 在这里,虽然实际上没有开启的80端口,但是由于IP地址192.168.2.80中包含了字符串"80",这样导致该行被命中,出现了错误结果,所以,我希望是: 只截取 Local Address 中相应的端口,例如上面的192.168.2.142:80 中对应的80

作者: freeants001     时间: 2009-4-22 06:45
@echo off
for /f "tokens=1,2" %%i in ('netstat -an -p TCP^|find ":80"') do @echo %%j
pause

作者: yishanju     时间: 2009-4-22 09:12
试试WMIC ,好像可以。。。

作者: jmz573515     时间: 2009-4-25 06:14
Set Ws=CreateObject("WScript.Shell")
Set oExec=ws.Exec("%comspec% /c netstat -an -p TCP")
s=oExec.StdOut.ReadAll
wscript.echo re(s)
function re(a)
	set regex=new regexp
	regex.pattern=":[1-9][\d]{1,4}"
	regex.global=true
	set matchs=regex.execute(a)
	for each match in matchs
		m=replace(match,":","")
		if instr(re,m)=0 then
			re=re & m & vbcrlf
		end if
	next
end function

作者: 26933062     时间: 2009-4-25 08:25
若你的 Local Address 中间是空格的话 :
@echo off
for /f "tokens=1-2 delims= " %%a in ('netstat -an -p TCP') do (
   if defined flag set "ip=%%b"&set "flag="
   if /i "%%b %%c"=="Local Address" set flag=a
)
echo %ip%
pause
[ Last edited by 26933062 on 2009-4-25 at 08:26 ]