中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [求助] 字符串筛选 上一主题 | 下一主题
knitter
新手上路





积分 2
发帖 2
注册 2008-3-18
状态 离线
『楼 主』:  [求助] 字符串筛选

说明:
最近在使用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系统自带的程序实现

请指教!

2009-4-22 04:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
freeants001
中级用户




积分 330
发帖 244
注册 2006-4-14
来自 湖北
状态 离线
『第 2 楼』:  


@echo off
for /f "tokens=1,2" %%i in ('netstat -an -p TCP^|find "80"') do @echo %%j
pause


2009-4-22 04:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knitter
新手上路





积分 2
发帖 2
注册 2008-3-18
状态 离线
『第 3 楼』:  不行哦!

首先,感谢你的帮助,不过没有完全实现我的要求:
假设有这种情况:
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

2009-4-22 04:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
freeants001
中级用户




积分 330
发帖 244
注册 2006-4-14
来自 湖北
状态 离线
『第 4 楼』:  


@echo off
for /f "tokens=1,2" %%i in ('netstat -an -p TCP^|find ":80"') do @echo %%j
pause


2009-4-22 06:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 5 楼』:  

试试WMIC ,好像可以。。。




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-4-22 09:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 6 楼』:  


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


2009-4-25 06:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 7 楼』:  

若你的 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 ]



致精致简!
2009-4-25 08:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: