找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27670|回复: 9

[网络连接] 【已经解决】批处理如何用for提取netstat -ano返回结果中的特定ip地址?

[复制链接]
发表于 2017-4-24 14:22:20 | 显示全部楼层 |阅读模式
本帖最后由 raddison 于 2017-4-25 18:18 编辑

求帮忙,关于forloop嵌套调用,传入外循环的变量值到内循环
  1. for /f "tokens=2" %%a in ('netstat -ano') do (
  2. set "str=%%a"
  3. SETLOCAL ENABLEDELAYEDEXPANSION
  4. call set str=!str:%search%=%replace%!
  5.   

  6. call :kill !r!
  7.   ENDLOCAL
  8. )

  9. :kill
  10. for  /f "tokens=4" %%c in (echo %1) do  (
  11.   echo !c!
  12. )
复制代码
其实我想实现,提取netstat -ano这个命令的返回结果当中的ip地址的列表而已

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2017-4-24 15:12:56 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=2" %%i in ('netstat -ano ^| findstr "\..*\..*\..*:"') do (
  3.     echo,%%i
  4. )
  5. pause
复制代码
这样可以吗

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2017-4-24 15:25:26 | 显示全部楼层
不行,要去掉后面的端口,我只所以把冒号用空格 隔开,就是想再循环一次,把第一列,也就是ip 拿出来,其他的端口信息,要过滤掉的。谢谢2楼
 楼主| 发表于 2017-4-24 16:05:02 | 显示全部楼层
本帖最后由 raddison 于 2017-4-24 18:09 编辑

@echo off

set b=
set "replace= : "
set "search=:"

for /f "tokens=2" %%a in ('netstat -ano') do (
set "str=%%a"
  
SETLOCAL ENABLEDELAYEDEXPANSION
call set str=!str:%search%=%replace%!

for /f "tokens=1,2 delims=:" %%b in ("!str!") do (
  echo;%%b
  endlocal
)
  
)
我研究出来了。 但是现在还有最后一个问题,是怎么除重复,麻烦各位给 个好招!谢谢
发表于 2017-4-24 19:42:50 | 显示全部楼层
回复 3# raddison


没有必要再循环一次
  1. @echo off
  2. for /f "tokens=2 delims=: " %%i in ('netstat -ano ^| findstr "\..*\..*\..*:"') do (
  3.     echo,%%i
  4. )
  5. pause
复制代码
去重的事情稍后再说
 楼主| 发表于 2017-4-24 23:37:16 | 显示全部楼层
嗯,有道理,可以的,那就剩下去除的问题了。谢谢5楼
发表于 2017-4-25 09:56:40 | 显示全部楼层
 楼主| 发表于 2017-4-25 11:11:02 | 显示全部楼层
@echo off

set b=
set s=
set m=
set i=
set count =0

  


for /f "tokens=2"  %%i in ('tasklist /nh /fi "imagename eq QQ.exe"') do (
    set "SkipRow=%%i"
    goto oSkip
)



:DoSkip


echo %SkipRow%
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=4 delims=: " %%m in ('netstat -ano ^| findstr "\..*\..*\..*:"^|find "%SkipRow%"^|find /v  "LISTENING"') do (
   
      if not defined %%m set %%m=s & echo,%%m  
)
endlocal
我补充了下,这个已经很接近我的问题答案了。那最后如果仅仅输出IP总数呢? 该如何。? 谢谢7楼,非常感谢了!
发表于 2017-4-25 14:22:40 | 显示全部楼层
回复 8# raddison


if not defined %%m set %%m=s & set /a count+=1
最后查看一下 count 的值就行了
 楼主| 发表于 2017-4-25 18:17:37 | 显示全部楼层
感激! 搞定了,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 16:06 , Processed in 0.014125 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表