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

[文本处理] 批处理如何删除文本中的重复行(重复全删不保留)?

[复制链接]
发表于 2011-8-26 15:54:48 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-8-16 20:59 编辑

请高手指点,问题如下:
1.txt内容如下:
屋顶花园
屠宰及肉类加工工业
新型肥料
电视节目
有毒植物
中药典彩色图谱
水果、蔬菜、坚果加工工业
神奇的红豆杉
ostrich
西双版纳
电视节目  
中药典彩色图谱  
ostrich

希望用批处理后将重复行删除后保存为2.txt,内容如下:
屋顶花园
屠宰及肉类加工工业
新型肥料
有毒植物
水果、蔬菜、坚果加工工业
神奇的红豆杉
西双版纳
 楼主| 发表于 2011-8-26 15:57:11 | 显示全部楼层
之前也有类似的贴子,但要求是有重复的行只保留一行,而我要求的是只要有重复的行就删除它,一行也不要。
请高手指点。谢谢!
发表于 2011-8-26 16:00:42 | 显示全部楼层
查找重复行的代码太多了,请搜索论坛,如果有不懂的问题请提问。
 楼主| 发表于 2011-8-26 16:10:26 | 显示全部楼层
我也在论坛里面查找过,但发现里面的代码只对数字和拼音有效,对汉字没有效果啊。
发表于 2011-8-26 16:27:21 | 显示全部楼层
 楼主| 发表于 2011-8-26 16:40:36 | 显示全部楼层
正在看搜索到的帖子,但绝大多数的代码处理汉字时都出错了。
发表于 2011-8-26 16:48:14 | 显示全部楼层
回复 6# sshlovewp


    为什么出错,请具体说明。
 楼主| 发表于 2011-8-26 16:53:39 | 显示全部楼层
for /f "delims=" %%i in (input.txt) do (
    if not defined %%i set %%i=s & echo %%i>>output.txt)

也不行,所有的帖子我都看过了,绝大多数帖子在举例子时都是用的数字或者字母,真正涉及到汉字时这些代码就不灵了。

换一个说法可能更明白一点,那就是如何提取一个文本中只出现一次的行。
真希望能在以前的帖子中找到前人的解决方法。寻找中。。。。。。
发表于 2011-8-26 17:38:40 | 显示全部楼层
本帖最后由 cjiabing 于 2011-8-26 17:39 编辑

提供一些我收藏的,各种方法都有,自己修改下。
  1. @echo off
  2. cls
  3. echo 过滤文本重复行——把重复的归为一个,其余的删除
  4. echo.
  5. set /p wb=文本1
  6. set /p wb1=文本2
  7. for /f "delims=" %%i in (%wb%) do (
  8. if not defined %%i set %%i=A & echo %%i>>%wb1%
  9. )
  10. echo 处理完成
  11. ping /n 2 127.0.1 >nul
  12. goto :eof
复制代码


  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo 提取文本重复行——只要重复的部分,不重复的不要
  4. echo.
  5. set /p wb=请输入要处理的[路径]文本:
  6. set /p wb1=请输入处理后生成的[路径]文本:
  7. for /f "delims=" %%a in ('sort %wb%') do (
  8. if %%a equ !b! echo %%a>>%wb1%
  9. set b=%%a)
  10. echo 处理完成
  11. ping /n 2 127.0.1 >nul
  12. goto :eof
复制代码

  1. @echo off
  2. cls
  3. echo 比较文本提取重复行
  4. echo,
  5. echo (如有:1.txt 2.txt 提取1.txt在2.txt里出现的行)
  6. echo.
  7. set /p wb1=请输入要处理的[路径]文本1:
  8. set /p wb2=请输入要处理的[路径]文本2:
  9. set /p wb3=请输入处理后生成的[路径]文本:
  10. for /f "delims=" %%c in (%wb1%) do (
  11. findstr "%%c" %wb2%>nul &&echo %%c>>%wb3%)
  12. echo 处理完成
  13. ping /n 2 127.0.1 >nul
  14. goto :eof
复制代码

  1. @echo off
  2. cls
  3. echo.
  4. echo.
  5. echo                            比较文本提取不重复
  6. echo,
  7. echo        如有:1.txt 2.txt,提取2.txt在1.txt里没有的行
  8. echo        文本2.txt应当比1.txt多一些内容。
  9. echo        重复的不要
  10. echo.
  11. set /p wb1=请输入要处理的[路径]文本2:
  12. set /p wb2=请输入要处理的[路径]文本1:
  13. set /p wb3=请输入处理后生成的[路径]文本:
  14. for /f "delims=" %%c in (%wb1%) do (
  15. findstr "%%c" %wb2%>nul ||echo %%c>>%wb3%)
  16. echo 处理完成
  17. ping /n 2 127.0.1 >nul
  18. goto :eof

复制代码

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo 提取文本重复行——只要重复的部分,不重复的不要
  4. echo.
  5. set /p wb=请输入要处理的[路径]文本:
  6. set /p wb1=请输入处理后生成的[路径]文本:
  7. for /f "delims=" %%a in ('sort %wb%') do (
  8. if not %%a equ !b! echo %%a>>%wb1%
  9. set b=%%a)
  10. echo 处理完成
  11. ping /n 2 127.0.1 >nul
  12. goto :eof
复制代码

评分

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

查看全部评分

发表于 2011-8-26 21:40:00 | 显示全部楼层
本帖最后由 ArdentMan 于 2011-8-26 22:23 编辑

不知道楼主如何搜索的~~~

  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. (For /F "delims=" %%i In ('Sort 1.txt^&Echo end') Do (
  3.   If "!Str!" NEQ "%%i" (
  4.     For %%j In ("!Str!") Do If "!%%~j!" EQU "a" Echo,!Str!
  5.   )
  6.   Set "Str=%%i"
  7.   If Not Defined !Str! (
  8.     Set "!Str!=a"
  9.     ) Else (
  10.     Set "!Str!=b"
  11.   )
  12. ))>2.txt
  13. Start 2.txt
复制代码
ps:请注意你的测试文本中有很多空格导致肉眼看到很多重复内容没删除
发表于 2011-8-27 00:43:54 | 显示全部楼层

  1. @echo off
  2. for /f "delims=" %%i in (1.txt) do (
  3.     set /a .%%i+=1
  4. )
  5. (for /f "tokens=1,2 delims=.=" %%i in ('set.') do (
  6.     if %%j geq 2 echo %%i
  7. ))>$
  8. (findstr /i /v /g:$ 1.txt)>$$
  9. move $$ 1.txt
  10. del /q $
  11. pause
复制代码
发表于 2011-8-27 09:06:59 | 显示全部楼层
回复 6# sshlovewp


绝大多数?比如说包括哪些呢?
 楼主| 发表于 2011-8-30 10:23:38 | 显示全部楼层
不好意思,周末没上网,对以上各位lz的热情帮助表示最诚挚的感谢!
9楼的第三个代码果然有效。太感谢了!
下面的代码还没有来得及实验,因为实在是太兴奋了。
谢谢你们!
 楼主| 发表于 2011-8-30 11:28:34 | 显示全部楼层
因该是9楼的第四个代码,该代码功能超强,它能将1.txt和2.txt两个文本文档中重复的内容单独提取出来并存为temp.txt(实际上并不会生成temp.txt,为了不让大家混淆)。然后在1.txt中查找,如果1.txt中有和temp.txt重复的内容就删除,最后生成的文件可以单独保存为3.txt。所有这些都是一气呵成的。我做了一点改动,供有这方面需要的朋友参考:
@echo off
for /f "delims=" %%c in (1.txt) do (
findstr "%%c" 2.txt>nul ||echo %%c>>3.txt)
start 3.txt
 楼主| 发表于 2011-8-30 11:45:52 | 显示全部楼层
这个代码功能超强还体现在,需要比较的两个文本里面的内容既可以是汉字,也可以是字母、数字等。
的确是太给力了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 18:07 , Processed in 0.023539 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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