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

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

需求如题目,
如本身数据为:
a 1
a 1
b 2
c 3
c 3
a 1
期望其转化的结果是:
a 1
b 2
c 3
a 1
一直没想明白这个算法的实现,用bat
还请高人指点迷津,多谢多谢
1

评分人数

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

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

TOP

  1. uniq a.txt >b.txt
复制代码

TOP

回复 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,他会给我出来两列?觉得比较困惑


多谢了哈

TOP

本帖最后由 apang 于 2012-12-26 16:32 编辑

回复 4# pengli0108


    第一列与第二列之间不是空格,而是跳格(Tab)?
话说只比较第一列的话,for /f %%a in (test.txt) do ...
即tokens和delims 可以省略

TOP

回复 5# apang


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

   其实去掉重复行的需求我已经满足了,只是很疑惑为何输出会是一个%%a,就有两列,其实我是四列都要,但是我只需要三个参数%%a,%%b,%%c而不是四个。

TOP

回复 6# pengli0108


    把那个txt文件压缩一下,传上来看看。

TOP

回复 7# BAT-VBS


    好的,已经贴上去了,麻烦看看,让后生多多学习。

TOP

回复 8# pengli0108


试试这个
1

评分人数

TOP

回复 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"
不是很清楚这块儿

谢谢哈,麻烦你了。多谢

TOP

回复 10# pengli0108


    为了防止字符串里面有特殊字符的时候代码出错

TOP

返回列表