楼 主
[求助] 字符串筛选
发表于 2009-04-22 04:12 · 中国 江西 南昌 电信
新手上路
★
积分 2 发帖 2 注册 2008-03-18 16:40 UID 113318 性别 男
状态 离线
说明:
最近在使用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系统自带的程序实现 !
请指教!
第 2 楼
发表于 2009-04-22 04:32 · 中国 湖北 黄石 电信
中级用户
★★
积分 330 发帖 244 注册 2006-04-14 14:07 UID 53823 性别 男 来自 湖北
状态 离线
@echo off
for /f "tokens=1,2" %%i in ('netstat -an -p TCP^|find "80"') do @echo %%j
pause
第 3 楼
不行哦!
发表于 2009-04-22 04:51 · 中国 江西 南昌 电信
新手上路
★
积分 2 发帖 2 注册 2008-03-18 16:40 UID 113318 性别 男
状态 离线
首先,感谢你的帮助,不过没有完全实现我的要求:
假设有这种情况:
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
第 4 楼
发表于 2009-04-22 06:45 · 中国 湖北 黄石 电信
中级用户
★★
积分 330 发帖 244 注册 2006-04-14 14:07 UID 53823 性别 男 来自 湖北
状态 离线
@echo off
for /f "tokens=1,2" %%i in ('netstat -an -p TCP^|find ":80"') do @echo %%j
pause
第 5 楼
发表于 2009-04-22 09:12 · 中国 北京 联通
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488 发帖 1,357 注册 2006-05-20 12:00 UID 55770
状态 离线
试试WMIC ,好像可以。。。
有问题请发论坛或者自行搜索,再短消息问我的统统是SB
第 6 楼
发表于 2009-04-25 06:14 · 中国 辽宁 本溪 联通
银牌会员
★★★
积分 1,212 发帖 464 注册 2006-12-13 21:11 UID 73417 性别 男
状态 离线
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,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
第 7 楼
发表于 2009-04-25 08:25 · 中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268 发帖 879 注册 2006-12-19 16:23 UID 73968 性别 男
状态 离线
若你的 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 ]
致精致简!
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正