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

[文本处理] [已解决]批处理怎样找出文件中未出现的数字?

本帖最后由 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试了好久也没弄出来,求助达人。谢谢。。
1

评分人数

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

你是怎么做的!我是新手,代码写不出来我给思路行吧?
用自加代码!从一加起。%a%
再用for,for里面的用‘命令find“查找10。1。17。%a%
再用errorlevel查看是否有!
再把没有的ip写出来!
不知道看懂没你!
本人已死!不用联系!~
要联系下来联系!~~

TOP

本帖最后由 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
复制代码

TOP

  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
复制代码
1

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

参照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
复制代码
1

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

回复 5# 601997526

setlocal ENABLEDELAYEDEXPANSION,没明白上面代码加这句作甚?

TOP

  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是要查找的那几条记录
1

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

回复 6# lxzzr


   个人习惯问题,所以就顺手加上了

TOP

回复 3# CrLf


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

TOP

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

评分人数

    • CrLf: 乐于助人PB + 3

TOP

每个代码都试了下,FOR中嵌套findstr效率很慢啊

TOP

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

TOP

返回列表