Board logo

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

作者: raddison    时间: 2017-4-24 14:22     标题: 【已经解决】批处理如何用for提取netstat -ano返回结果中的特定ip地址?

本帖最后由 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地址的列表而已
作者: ShowCode    时间: 2017-4-24 15:12

  1. @echo off
  2. for /f "tokens=2" %%i in ('netstat -ano ^| findstr "\..*\..*\..*:"') do (
  3.     echo,%%i
  4. )
  5. pause
复制代码
这样可以吗
作者: raddison    时间: 2017-4-24 15:25

不行,要去掉后面的端口,我只所以把冒号用空格 隔开,就是想再循环一次,把第一列,也就是ip 拿出来,其他的端口信息,要过滤掉的。谢谢2楼
作者: raddison    时间: 2017-4-24 16:05

本帖最后由 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
)
  
)
我研究出来了。 但是现在还有最后一个问题,是怎么除重复,麻烦各位给 个好招!谢谢
作者: ShowCode    时间: 2017-4-24 19:42

回复 3# raddison


没有必要再循环一次
  1. @echo off
  2. for /f "tokens=2 delims=: " %%i in ('netstat -ano ^| findstr "\..*\..*\..*:"') do (
  3.     echo,%%i
  4. )
  5. pause
复制代码
去重的事情稍后再说
作者: raddison    时间: 2017-4-24 23:37

嗯,有道理,可以的,那就剩下去除的问题了。谢谢5楼
作者: ShowCode    时间: 2017-4-25 09:56

回复 6# raddison


http://bbs.bathome.net/thread-5219-1-1.html
http://bbs.bathome.net/thread-5509-1-1.html
http://bbs.bathome.net/thread-4690-1-1.html
http://bbs.bathome.net/thread-5326-1-1.html
作者: raddison    时间: 2017-4-25 11:11

@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楼,非常感谢了!
作者: ShowCode    时间: 2017-4-25 14:22

回复 8# raddison


if not defined %%m set %%m=s & set /a count+=1
最后查看一下 count 的值就行了
作者: raddison    时间: 2017-4-25 18:17

感激! 搞定了,谢谢!




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