[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理文件怎样实现端口扫描结果整理?

原代码:
  1. for /f "usebackq tokens=1,2,3*" %%i in (Result.txt) do (
  2. if 1433==%%j (
  3. echo %%i>>1433.txt
  4.   ) else (
  5.    if 80==%%j (
  6.     echo %%i>>80.txt
  7.      ) else (
  8.       if 79==%%j (
  9.        echo %%i>>79.txt
  10.         ) else (
  11.          if 53==%%j (
  12.           echo %%i>>53.txt
  13.            ) else (
  14.             if 21==%%j (
  15.              echo %%i>>21.txt
  16.               ) else (
  17.                if 23==%%j (
  18.                echo %%i>>23.txt
  19.                 ) else (
  20.                  if 135==%%j (
  21.                   echo %%i>>135.txt
  22.                    ) else (
  23.                     if 139==%%j (
  24.                      echo %%i>>139.txt
  25.                       ) else (
  26.                        if 445==%%j (
  27.                         echo %%i>>445.txt
  28.                          ) else (
  29.                           if 2967==%%j (
  30.                            echo %%i>>2967.txt
  31.                             ) else (
  32.                              if 161==%%j (
  33.                               echo %%i>>161.txt
  34.                                ) else (
  35.                                 if 160==%%j (
  36.                                  echo %%i>>160.txt
  37.                                   ) else (
  38.                                    if 9431==%%j (
  39.                                     echo %%i>>9431.txt
  40.                                      ) else (
  41.                                       if 8383==%%j (
  42.                                        echo %%i>>8383.txt
  43.                                         ) else (
  44.                                          if 3306==%%j (
  45.                                           echo %%i>>3306.txt
  46. )
  47. )
  48. )
  49. )
  50. )
  51. )
  52. )
  53. )
  54. )
  55. )
  56. )
  57. )
  58. )
  59. )
  60. )
  61. )
复制代码
如何修改成以扫描到的端口分别以端口号为文件名输出?也就是无需设置具体输出的端口号
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 ivor 于 2012-2-8 19:27 编辑

牛人,有必要嵌套这个程度吗,汗
  1. for /f "usebackq tokens=1,2,3*" %%i in (Result.txt) do (
  2. echo %%i >>%%j.txt
  3. )
复制代码
1

评分人数

    • CrLf: 耐心,乐于助人PB + 7 技术 + 1

TOP

本帖最后由 wh1234567 于 2012-2-8 20:31 编辑

回复 2# ivor


    老兄,好像不行,能不能将处理时产生的临时文件一并删除?

TOP

回复 2# ivor


    能不能将处理时产生的临时文件一并删除?

TOP

回复 4# wh1234567


    不知道你那是什么情况,Result.txt是临时?还是每个%%j.txt是临时文件

TOP

回复 5# ivor


能不能去除重复行,并将处理时产生的临时文件一并删除?

TOP

本帖最后由 ivor 于 2012-2-8 21:48 编辑

回复 6# wh1234567
  1. for /f "tokens=1,2,3*" %%i in (Result.txt) do (
  2. if "%%j" NEQ "" if "%%~xj" EQU "" echo %%i >>%%j.txt
  3. )
  4. REM del Result.txt
复制代码
生成的临时文件,已经知道原因,Time文件跟我这个代码应该没有关系吧。那两个类型的临时文件不会产生。但不保证其他的问题发生,因为你的情况我也不完全了解
最后一句注释掉了,前面如果正常则可以去掉注释

TOP

本帖最后由 wh1234567 于 2012-2-8 23:35 编辑

回复 7# ivor

第一个问题:
这次正常了,
    输出的文本能不能分别去除重复行,最后在批处理界面上显示多少个端口,分别是哪些端口号?

第二个问题:
另外如果想将原代码精简一下的话,如何设定指定输出的多个端口号?例如:
set duankouhao=1,2,3402,4,5,26,7,8,9
代码该如何修改?

TOP

本帖最后由 ivor 于 2012-2-9 14:00 编辑

回复 8# wh1234567
  1. @echo off
  2. set duankouhao=1,2,3402,4,5,26,7,8,9
  3. for %%a in (%duankouhao%) do (
  4. set %%a=ivor
  5. )
  6. for /f "tokens=1,2,3*" %%i in (Result.txt) do (
  7.         if defined %%j if not defined %%i if "%%j" NEQ "" if "%%~xj" EQU "" (
  8. set %%i=.
  9. set /a ivor%%j+=1
  10. echo %%i)>>%%j.txt
  11. )
  12. for /f "tokens=1,2delims==" %%a in ('set ivor') do (
  13. set var=%%a
  14. call echo %%var:~4%% 端口记录了总共%%b个
  15. )
  16. pause
  17. REM del Result.txt
复制代码
要自己多学习,不能老问别人哦。楼主挖的一手好坑,你还有要求吗?

TOP

本帖最后由 wh1234567 于 2012-2-9 06:05 编辑

回复 9# ivor


    这个和第一个问题以及第二个问题都不太相符,并且不能删除临时文件以及分别去除输出文本里的重复ip;端口号总数其实也就是以端口号为文件名输出的文本个数;在批处理界面上显示每个端口号分别是多少个ip即可。
第一个问题以及第二个问题可能得分别2个批处理

TOP

本帖最后由 ivor 于 2012-2-9 00:07 编辑

1.功能去除重复IP   2.根据duankouhao变量控制输出端口结果  3.最后显示指定端口总数量

代码精简啊,难,你的功能越要求越复杂。为了测试这个批处理的运行速度,我专门建了一个2W行的不重复IP的文件,搞得我电脑蓝屏,可能是溢出了
问题签名:
  问题事件名称:        BlueScreen
  OS 版本:        6.1.7601.2.1.0.256.1
  区域设置 ID:        2052
哎 ,O__O"…     速度倒是还可以啊,千万别执行上W行的

TOP

回复 11# ivor

非常感谢您的帮忙,9楼的代码能不能修正一下,有些小错误和不能删除临时文件,增加一个端口共计多少个也就是以端口号为文件名输出的文本个数。

另外 set duankouhao=1,2,3402,4,5,26,7,8,9 是属于第二个问题也就是指定输出多个端口号为文件名的文本,第一个问题不需要这个代码

TOP

本帖最后由 ivor 于 2012-2-9 14:18 编辑

回复 12# wh1234567
  1. @echo off
  2. set duankouhao=8080,3389,80,23,20
  3. for %%a in (%duankouhao%) do (
  4.         set prefix%%a=.
  5. )
  6. for /f "tokens=1,2,3*" %%i in (Result.txt) do (
  7.         if defined prefix%%j if "%%j" NEQ "" if "%%~xj" EQU "" (
  8.                
  9.                 set /a ivor%%j+=1
  10.                 echo %%i)>>%%j.txt
  11. )
  12. for /f "tokens=1,2delims==" %%a in ('set ivor') do (
  13.         set var=%%a & set /a count+=1
  14.         call echo %%var:~4%% 端口记录了总共 %%b 个
  15. )
  16. echo 总计有 %count%个端口号
  17. pause
复制代码
去除重复的功能以去掉,因为检查IP重复是不正确的,可能一个IP会开放多个端口,加的功能越多程序会越慢,如果真要监测重复的IPand端口,可以验证每个%%i(IP)%%j(端口),在这我就不加了。
修改了会可能会生成TIME文件的代码,你不发出来结果,我还真不相信,程序会生成TIME文件⊙﹏⊙b汗

TOP

本帖最后由 wh1234567 于 2012-2-9 15:26 编辑

回复 13# ivor
大有进步

    环境变量 ivor 没有定义
总计有 个端口号
请按任意键继续. . .

21-26这种格式能不能支持也就是21到26?既支持21,22,23,26  也支持21-26这种格式

并且要求分别以端口号命名输出,

TOP

你的问题总是层出不穷,我应付不过来了,你还是想好了,总结一下再发新帖吧,然后把你的样本记得上传。


ivor 没定义,是因为result.txt没有数据

TOP

返回列表