Board logo

标题: [网络连接] 批处理命令netstat -ano如何判断8001和8002端口? [打印本页]

作者: batbat123    时间: 2012-6-2 21:53     标题: 批处理命令netstat -ano如何判断8001和8002端口?

以下2个判断问题,,,求教


命令netstat -ano判断8001和8002端口
8001和8002两个端口均不存在跳转goto ouz 执行指定的命令       
8001和8002任意存在其中一个端口 跳转goto ouq执行指定的命令
8001和8002两个端口都存在跳转goto oua执行指定的命令






判断 以netstat -ano命令判断 8001和8002端口
8001和8002都均存在        跳转执行下步命令5
8001和8002只存在一个另外1个不存在或者1个都不存在         跳转goto qqw执行命令


:qqw
xxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxx
作者: apang    时间: 2012-6-2 23:17

  1. @echo off
  2. for %%a in (8001 8002) do (
  3.   netstat -ano|findstr "%%a">nul && set "v%%a=1" || set "v%%a=0"
  4. )
  5. if "%v8001%"=="1" (
  6.   if "%v8002%"=="1" (goto :oua) else goto :ouq
  7. ) else (
  8.   if "%v8002%"=="1" (goto :ouq) else goto :ouz
  9. )
  10. :oua
  11. echo 端口全部存在&pause&goto :eof
  12. :ouq
  13. echo 仅存在一个端口&pause&goto :eof
  14. :ouz
  15. echo 端口都不存在&pause
复制代码

作者: apang    时间: 2012-6-2 23:20

跳转执行下步命令5 是啥意思?
  1. @echo off
  2. for %%a in (8001 8002) do (
  3.   netstat -ano|findstr "%%a">nul && set "v%%a=1" || set "v%%a=0"
  4. )
  5. set/a "ALL=v8001 + v8002"
  6. if "%ALL%"=="2" (goto :5) else goto :qqw
  7. :5
  8. echo 端口全部存在&pause&goto :eof
  9. :qqw
  10. echo 最多存在一个端口&pause&goto :eof
复制代码

作者: neorobin    时间: 2012-6-3 10:28

本帖最后由 neorobin 于 2012-6-3 10:41 编辑

在前帖中, 之前给楼主的回复都是仓促地, 未经测试给出的代码, 在此表示歉意.
后在 11 楼给出的回复是认真测试过的, 而楼主未给出任何回应, 又另开此帖.
这里, 我再重复给出那段代码, 楼主若仍不愿回应, 我只能认为楼主缺乏作为一个求助者应有的礼貌.

1. 楼主此帖所述其实就是要求判断是否 两个端口 都找到了, 都找到了, 如何; 否则又如何.
2. netstat -ano 中参数  -o 会 "显示与每个连接相关的所属进程 ID",
   如果该进程 ID 数字串恰好和某一个端口号相同 或者 包含 端口号数字串, 比如: PID 为 8001, 80023 等
   而相关的连接却 并非 相应端口, 判断将可能 受到干扰 或者 出错. 所以用 netstat -an 更好.

下面代码中只是给出了各种情形的相关判断, 至于判断后做什么, 简单修改即可, 相信楼主可以解决.
第 11, 12 行代码只是将 没有 找到所有端口 的情形又细分判断处理了,
不需要如此细分的话, 简单的以一个相应的处理代码替换即可.
  1. @echo off & setlocal enabledelayedexpansion
  2. set "Ports=8001 8002"
  3. for %%a in (%Ports% Any) do set "found%%a=0"
  4. set "foundAll=1"
  5. for /f "tokens=3,5 delims=: " %%a in ('netstat -an') do (
  6.   set /a "found%%a=1,found%%b=1"
  7. )
  8. for %%a in (%Ports%) do set /a "foundAll&=found%%a, foundAny|=found%%a"
  9. if "!foundAll!"=="1" (echo,找到全部端口) else (
  10.   for %%a in (%Ports%) do if "!found%%a!"=="1" (echo,找到端口 %%a) else (echo,未找到端口 %%a)
  11.   if "!foundAny!"=="0" (echo,未找到任何端口) else (echo,找到至少一个端口)
  12. )
  13. pause
复制代码

作者: gawk    时间: 2012-6-3 10:37

相信楼主可以解决

一般来说出钱请人写代码的都是不太懂的
作者: 咒夜坠    时间: 2014-2-13 15:12

回复 4# neorobin

大神的代码好深奥啊

3,4行里面的 set "found%%a=0"
set "foundAll=1"是神马意思
还有后面的SET
被你的set 用法搞昏了。。。
好强大的用法




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2