Board logo

标题: [文本处理] 求助!把文本中重复的行删除,用findstr遇到斜杠或反斜杠时出了问题 [打印本页]

作者: 普大喜奔    时间: 2014-9-19 13:25     标题: 求助!把文本中重复的行删除,用findstr遇到斜杠或反斜杠时出了问题

代码是这样的
  1. @echo off
  2. cd. >2.txt
  3. for /f "delims=" %%a in (1.txt) do (
  4.   findstr /l /c:"%%a" 2.txt || echo %%a>>2.txt
  5. )
  6. del 1.txt 1>nul 2>nul
  7. ren 2.txt 1.txt
复制代码
作用是逐行读取1.txt的内容,如果2.txt中无此行则写入,有的话什么也不做,达到删重的目的
问题是:如果1.txt的行的结尾有“\”或“/”时,findstr没法正常搜索字符串,造成改行丢失或者是卡在那里,有哪位高人可帮忙解决 小弟先谢过
作者: 普大喜奔    时间: 2014-9-19 13:40

看到一段代码可以实现删重复行的功能,如下
  1. @echo off
  2. :: 删除重复的行,但不能保留空行
  3. :: 对不符合变量命名规则、变量个数超过限制的文本都无法正确处理
  4. ::
  5. (echo 清除重复行后的文件内容:& echo.)>str_.txt
  6. for /f "delims=" %%i in (test.txt) do (
  7. if not defined %%i set %%i=A & echo %%i>>str_.txt)
  8. start str_.txt
复制代码
试了下没有findstr遇到斜杠的问题,但是看不明白那个if not defined %%i set %%i=A 是什么意思
另外“变量个数超过限制”意思是文本过大时没法正常处理吗?
作者: Batcher    时间: 2014-9-19 13:45

回复 2# 普大喜奔


    是的,在一个BAT脚本里面可以定义的变量的个数是有限制的,所有这个方案无法处理大文件。
作者: 普大喜奔    时间: 2014-9-19 13:50

回复 3# Batcher
大哥能不能给看看1楼的问题 拜谢!
作者: wscript    时间: 2014-9-19 18:26

回复 1# 普大喜奔


    以前好像经常看到某位版主说尽量少用findstr,因为它的bug实在太多了。这不又展现了一次。
作者: 普大喜奔    时间: 2014-9-19 19:22

回复 5# wscript
  1. for /f "delims="  %%a in (DATA) do (
  2.   set var=%%a
  3. ::搜索以\结尾的字符串会导致异常,删除结尾的\
  4.   if !var:~-1!==\ set var=!var:~0,-1!
  5.   (findstr /l /c:"!var!" TEMP)>nul || echo %%a>>TEMP
  6. )
  7. del DATA 1>nul 2>nul
  8. ren TEMP DATA
复制代码
这样暂时解决了问题 凑合用吧
作者: CrLf    时间: 2014-9-20 00:27

findstr 是有 /g 开关的
  1. @echo off
  2. findstr /vilxg:2.txt 1.txt>临时文件
  3. type 临时文件>>2.txt
复制代码

作者: 普大喜奔    时间: 2014-9-20 10:13

回复 7# CrLf
是不是用这个不需要循环了
没搞明白怎么用g 不过把findstr 换成find 就没有烦人的\问题了 呵呵
作者: CrLf    时间: 2014-9-20 15:09

回复 8# 普大喜奔


    /g 开关就是读取一个文件,以其中的内容作为关键词来搜索另一个文件(或命令的输出)




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2