Board logo

标题: [文本处理] [已解决]批处理怎样找出文件中未出现的数字? [打印本页]

作者: carbonincauc    时间: 2011-10-6 19:01     标题: [已解决]批处理怎样找出文件中未出现的数字?

本帖最后由 carbonincauc 于 2011-11-4 23:59 编辑

求助达人,现有一文件a.txt,格式如:
10.1.17.17
10.1.17.99
10.1.17.118
10.1.17.166
10.1.17.123
10.1.17.125
10.1.17.156
10.1.17.184
10.1.17.199
10.1.17.216
10.1.17.226
10.1.17.186
现在想找出10.1.17.1-255 中没有出现的IP地址,分行存放到另外的b.txt中以方便调用,我该怎么做呢?
想了好久,用for试了好久也没弄出来,求助达人。谢谢。。
作者: jellyhk    时间: 2011-10-6 19:31

你是怎么做的!我是新手,代码写不出来我给思路行吧?
用自加代码!从一加起。%a%
再用for,for里面的用‘命令find“查找10。1。17。%a%
再用errorlevel查看是否有!
再把没有的ip写出来!
不知道看懂没你!
作者: CrLf    时间: 2011-10-6 20:14

本帖最后由 CrLf 于 2011-10-6 20:15 编辑
  1. for /f "tokens=4 delims=. " %%a in (ip.txt) do set ip%%a=.
  2. for /l %%a in (1 1 255) do if not defined ip%%a echo 不存在 %%a
复制代码

作者: yangfengoo    时间: 2011-10-6 20:17

  1. @echo off
  2. for /f "tokens=4 delims=." %%a in (a.txt) do set _%%a=%%a
  3. (for /l %%a in (1 1 255) do if not defined _%%a echo 10.1.17.%%a)>B.txt
复制代码

作者: 601997526    时间: 2011-10-6 20:56

参照2楼的思路
  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. for /l %%i in (1 1 255) do (findstr "^10\.1\.17\.%%i$" a.txt >nul||echo 10.1.17.%%i)
  3. pause
复制代码

作者: lxzzr    时间: 2011-10-7 00:33

回复 5# 601997526

setlocal ENABLEDELAYEDEXPANSION,没明白上面代码加这句作甚?
作者: hankerer    时间: 2011-10-7 10:54

  1. @echo off
  2. for /l %%i in (1 1 255) do echo 10.1.17.%%i>>c.txt
  3. findstr /v /G:b.txt c.txt>result.txt
  4. del c.txt/q
  5. pause
复制代码
给个不一样的思路。

b.txt是要查找的那几条记录
作者: 601997526    时间: 2011-10-7 11:24

回复 6# lxzzr


   个人习惯问题,所以就顺手加上了
作者: zaixinxiangnian    时间: 2011-10-7 19:44

回复 3# CrLf


    CRLF这个我理解了好长时间,不知道对不对,是不是第一句是把已有的数赋值给“.”。第二句从1到255来检测,如果没有被上句赋值就显示出来。特别是set ip%%a=. 理解了好长时间,不知道执行过程是怎么样的。在我一句一句试的时候,本来echo %%a来试的,也没有明白其中的意思,把%%a改成set ip%%a=. 的时候忘了把echo去掉。运行结果看到把所有已有的值赋给了“.”本来还正打算问你怎么解释呢?
作者: HAT    时间: 2011-10-7 20:13

不是把已有的数赋值给“.”,而是把“.”赋值给用已有的数定义的变量。然后根据这个变量是否被定义过,来判断这个1~255哪个是已有的。
这个方法在删除文件重复行的代码里面经常会用到,比如:
http://bbs.bathome.net/thread-4690-1-1.html
作者: zaixinxiangnian    时间: 2011-10-7 20:19

每个代码都试了下,FOR中嵌套findstr效率很慢啊
作者: CrLf    时间: 2011-10-7 20:43

在脚本末尾 set ip 查看变量一下也许就明白了
外部命令天生运行效率高但是启动效率低,非必要情况不宜进入循环




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