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

[文本处理] [己解决]批处理如何把重复行写入b.txt?

[复制链接]
发表于 2013-6-26 14:23:42 | 显示全部楼层 |阅读模式
本帖最后由 keshun 于 2013-6-26 20:12 编辑

批处理对a.txt进行处理,重复行(字母大小写不同也算重复行)写入b.txt,求代码,谢谢!!

a.txt内容如下:
bindmac=bc-ae-c5-8e-7c-4c   
bindmac=00-e0-4c-3b-02-a3   
bindmac=00-E0-4C-27-58-C1   
bindmac=b8-70-f4-22-22-bb   
bindmac=c8-0a-a9-8f-0b-e7   
bindmac=dc-0e-a1-d3-d9-72   
bindmac=1c-fa-68-90-7e-4b   
bindmac=00-16-17-9a-94-2a   
bindmac=00-30-18-a2-f7-3a   
bindmac=e8-9a-8f-25-08-59   
bindmac=00-e0-4c-29-13-82  
bindmac=00-e0-4c-27-58-c1   
bindmac=00-30-18-af-8b-e8   
bindmac=00-30-18-a2-f7-3a
bindmac=f4-6d-04-11-b8-bb   
bindmac=b8-88-e3-72-aa-a3   
bindmac=00-e0-4c-27-58-c1  
bindmac=00-E0-66-80-F1-F8   
bindmac=00-e0-61-14-23-2d   
bindmac=00-e0-b0-fb-b2-41   
bindmac=b8-70-f4-39-9e-a3   


b.txt内容(排序随意)如下:
bindmac=00-30-18-a2-f7-3a
bindmac=00-30-18-a2-f7-3a
bindmac=00-E0-4C-27-58-C1  
bindmac=00-e0-4c-27-58-c1  
bindmac=00-e0-4c-27-58-c1

评分

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

查看全部评分

发表于 2013-6-26 15:15:32 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. set n=0
  3. (
  4. for /f "delims=" %%i in ('sort a.txt') do (
  5.     if defined str (
  6.        if /i "!str!" neq "%%i" (
  7.           if !n! gtr 1 for /l %%j in (1 1 !n!) do echo !str!
  8.           set str=%%i
  9.           set n=0
  10.        )
  11.     ) else set str=%%i
  12.       set /a n+=1
  13. )
  14. if !n! gtr 1 for /l %%j in (1 1 !n!) do echo !str!
  15. )>b.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2013-6-26 15:57:56 | 显示全部楼层
回复 2# terse


    谢谢!!我测试后是这样。

b.txt内容如下:
bindmac=00-e0-4c-27-58-c1   
bindmac=00-e0-4c-27-58-c1
发表于 2013-6-26 18:49:48 | 显示全部楼层
本帖最后由 xxpinqz 于 2013-6-26 18:51 编辑

  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims= " %%a in ('sort a.txt') do (
  3.   set "str2=!str1!"
  4.   set "str1=%%a"
  5.   if /i "!str1!"=="!str2!" (
  6.           set .=.
  7.           echo,!str2!
  8.   ) else (
  9.     if defined . (
  10.       set .=
  11.       echo,!str2!
  12.     )
  13.   )
  14. ))>b.txt
复制代码
2楼分割符要改为空格"delims= "

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2013-6-26 19:21:20 | 显示全部楼层
回复 3# keshun
应该行尾空格问题 解决办法:
将代码中所有%%i 替换为 %%~nxi 或者 去掉代码中 "delims="
Re:
xxpinqz  开始COPY 一楼样本是 删除行尾空格测试的 以为是论坛原因
其实 空格 就是默认分隔符 所以也没必要再去指定
发表于 2013-6-27 14:25:01 | 显示全部楼层
回复 5# terse
这倒是~~
不过还是去掉delims=好,你上次不是测出来%%~nx这样扩展效率低于用分割符
发表于 2013-6-27 17:42:37 | 显示全部楼层
回复 6# xxpinqz
嗯 我是给楼主修正代码的二条建议
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 12:01 , Processed in 0.023128 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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