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

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

[复制链接]
发表于 2011-10-6 19:01:19 | 显示全部楼层 |阅读模式
本帖最后由 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试了好久也没弄出来,求助达人。谢谢。。

评分

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

查看全部评分

发表于 2011-10-6 19:31:26 | 显示全部楼层
你是怎么做的!我是新手,代码写不出来我给思路行吧?
用自加代码!从一加起。%a%
再用for,for里面的用‘命令find“查找10。1。17。%a%
再用errorlevel查看是否有!
再把没有的ip写出来!
不知道看懂没你!
发表于 2011-10-6 20:14:11 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2011-10-6 20:17:22 | 显示全部楼层
  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技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

发表于 2011-10-6 20:56:46 | 显示全部楼层
参照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技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

发表于 2011-10-7 00:33:18 | 显示全部楼层
回复 5# 601997526

setlocal ENABLEDELAYEDEXPANSION,没明白上面代码加这句作甚?
发表于 2011-10-7 10:54:03 | 显示全部楼层
  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技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

发表于 2011-10-7 11:24:15 | 显示全部楼层
回复 6# lxzzr


   个人习惯问题,所以就顺手加上了
发表于 2011-10-7 19:44:24 | 显示全部楼层
回复 3# CrLf


    CRLF这个我理解了好长时间,不知道对不对,是不是第一句是把已有的数赋值给“.”。第二句从1到255来检测,如果没有被上句赋值就显示出来。特别是set ip%%a=. 理解了好长时间,不知道执行过程是怎么样的。在我一句一句试的时候,本来echo %%a来试的,也没有明白其中的意思,把%%a改成set ip%%a=. 的时候忘了把echo去掉。运行结果看到把所有已有的值赋给了“.”本来还正打算问你怎么解释呢?
发表于 2011-10-7 20:13:38 | 显示全部楼层
不是把已有的数赋值给“.”,而是把“.”赋值给用已有的数定义的变量。然后根据这个变量是否被定义过,来判断这个1~255哪个是已有的。
这个方法在删除文件重复行的代码里面经常会用到,比如:
http://bbs.bathome.net/thread-4690-1-1.html

评分

参与人数 1PB +3 收起 理由
CrLf + 3 乐于助人

查看全部评分

发表于 2011-10-7 20:19:17 | 显示全部楼层
每个代码都试了下,FOR中嵌套findstr效率很慢啊
发表于 2011-10-7 20:43:22 | 显示全部楼层
在脚本末尾 set ip 查看变量一下也许就明白了
外部命令天生运行效率高但是启动效率低,非必要情况不宜进入循环
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 05:42 , Processed in 0.021493 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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