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

[文本处理] [已解决]批处理如何删除连续重复行,只保留显示一行?

[复制链接]
发表于 2012-12-17 10:23:14 | 显示全部楼层 |阅读模式
需求如题目,
如本身数据为:
a 1
a 1
b 2
c 3
c 3
a 1
期望其转化的结果是:
a 1
b 2
c 3
a 1
一直没想明白这个算法的实现,用bat
还请高人指点迷津,多谢多谢

评分

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

查看全部评分

发表于 2012-12-17 12:54:07 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in (a.txt) do (
  3.    if "!str!" neq "%%a" echo,%%a
  4.    set "str=%%a"
  5. ))>b.txt
复制代码
发表于 2012-12-17 18:28:56 | 显示全部楼层
  1. uniq a.txt >b.txt
复制代码
 楼主| 发表于 2012-12-26 15:49:21 | 显示全部楼层
回复 2# apang


    有一个追问

我的test文件是这样的

414.08        2012-10-10 10:10        0
414.08        2012-10-10 10:10        0
414.08        2012-10-10 10:10        0
414.08        2012-10-10 10:10        0
414.08        2012-10-10 10:10        0
414.08        2012-10-10 10:10        0
414.08        2012-10-10 10:10        0
414.08        2012-10-10 10:10        0
414.08        2012-10-10 10:10        0
414.08        2012-10-10 10:10        0
414.08        2012-10-10 10:10        0
414.08        2012-10-10 10:11        0

我的代码是
  1. @echo off & setlocal enabledelayedexpansion
  2. cd.>new.txt
  3. for /f "tokens=1,2,3,4 delims= " %%a in (test.txt) do (

  4.    if !str! neq %%a set str=%%a&echo %%a >>new.txt

  5. )
复制代码
运行后
输出是:
414.08        2012-10-10

为何我的echo 只设置了一个%%a,他会给我出来两列?觉得比较困惑


多谢了哈
发表于 2012-12-26 16:26:54 | 显示全部楼层
本帖最后由 apang 于 2012-12-26 16:32 编辑

回复 4# pengli0108


    第一列与第二列之间不是空格,而是跳格(Tab)?
话说只比较第一列的话,for /f %%a in (test.txt) do ...
即tokens和delims 可以省略
 楼主| 发表于 2012-12-26 17:09:03 | 显示全部楼层
回复 5# apang


    这个我也不太清楚第一列与第二列的数据间隔是什么,数据是从excel里边copy过来的

   其实去掉重复行的需求我已经满足了,只是很疑惑为何输出会是一个%%a,就有两列,其实我是四列都要,但是我只需要三个参数%%a,%%b,%%c而不是四个。
发表于 2012-12-26 21:41:09 | 显示全部楼层
回复 6# pengli0108


    把那个txt文件压缩一下,传上来看看。
 楼主| 发表于 2013-1-2 16:32:28 | 显示全部楼层
回复 7# BAT-VBS


    好的,已经贴上去了,麻烦看看,让后生多多学习。
发表于 2013-1-2 20:45:55 | 显示全部楼层
回复 8# pengli0108


试试这个

评分

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

查看全部评分

 楼主| 发表于 2013-1-7 09:57:29 | 显示全部楼层
回复 9# BAT-VBS


    好用了,但是不太明白其中的原由。我看了下,确实我之前的数据之间可能有的是空格,有的是TAb隔开的。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=1,2,3,4 delims=                 " %%a in (test.txt) do (
  4.     if "!str!" neq "%%a" (
  5.         set "str=%%a"
  6.         echo,%%a---%%b---%%c---%%d
  7.     )
  8. ))>new.txt
复制代码
中间if "!str!" neq "%%a" 为何两边都加引号,还有内部的set "str=%%a"
不是很清楚这块儿

谢谢哈,麻烦你了。多谢
发表于 2013-1-7 10:12:47 | 显示全部楼层
回复 10# pengli0108


    为了防止字符串里面有特殊字符的时候代码出错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 22:56 , Processed in 0.016963 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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