标题: [求助]求如何判断每行相同的文本并删除它
[打印本页]
作者: fjcase
时间: 2007-4-5 11:59
标题: [求助]求如何判断每行相同的文本并删除它
例如有文件:
12345,
12345,
12346,
12456,
.....
能不能做个批处理判断该文件中的每行是否都相同,如果都相同,则运行某个程序,不同的话,就显示文件的内容.
作者: bw070
时间: 2007-4-5 13:32
似乎不太可能吧
学艺不精 只知道用
fc 1.txt 2.txt >3.txr
比较1.txt 和 2.txt 的不同 然后写到3.txt里
作者: digger
时间: 2007-4-6 00:56
对文件内容排序,然后判断首尾两行是否相同既可.
作者: fjcase
时间: 2007-4-6 05:59
高手们帮帮忙吧.能不能不用系统以后的程序啊?直接用批处理解决
作者: flyinspace
时间: 2007-4-6 06:11
@echo off & SetLocal EnableDelayedExpansion
set ReadFile=1.txt
set OutFile=2.txt
for /f "tokens=* " %%i in (%ReadFile%) do (
if not exist %OutFile% echo %%i>%OutFile%
type 2.txt | find /i "%%i"
if errorlevel 1 echo %%i >>%OutFile%
)
pause
作者: fjcase
时间: 2007-4-7 02:17
楼上的好像不能用的,什么都没实现
作者: dikex
时间: 2007-4-7 02:35
for /f "delims=" %%i in (a.txt) do set aa=%%i
for /f "delims=" %%i in (a.txt) do if not "%aa%"=="%%i" goto :ec
notepad.exe
goto :eof
:ec
type a.txt | more
pause
作者: wudixin96
时间: 2007-4-7 02:50
Quote: |
Originally posted by dikex at 2007-4-7 02:35 AM:
for /f "delims=" %%i in (a.txt) do set aa=%%i
for /f "delims=" %%i in (a.txt) do if not "%aa%"=="%%i" goto :ec
notepad.exe
goto :eof
:ec
type a. ... |
|
有没试过啊??for /f "delims=" %%i in (a.txt) do set aa=%%i执行完了才执行后面的句子的。
aa的值是a.txt的最后一行。
起码也得
for /f "delims=" %%i in (a.txt) do (
set aa=%%i
for /f "delims=" %%i in (a.txt) do if not "%aa%"=="%%i" goto :ec
)
[
Last edited by wudixin96 on 2007-4-7 at 02:55 AM ]
作者: digger
时间: 2007-4-7 03:23
@echo off
set str1=
for /f "delims=" %%i in ('sort test.txt') do (
if not defined str1 (
set "str1=%%i"
) else set "str2=%%i"
)
if "%str1%"=="%str2%" echo (文件的每行内容都相同) else echo 文件的每行内容不完全相同
pause
作者: lililulula
时间: 2007-4-7 04:40
5楼的朋友的代码好象有点问题 比如:4567
456
456
55
这样的内容只要首行开始第n行的内容包括n行以后的内容,如上面的第1行4567,包含第2,3行的456,然后执行结果就会把被包含的数字内容全部删除
此例执行结果为:4567
55
两行456均被删除,原因不清楚
另外请教5楼
Quote: |
type 2.txt | find /i "%%i"
if errorlevel 1 echo %%i >>%OutFile% |
|
此2行的作用,其中打出2.txt的内容也就是要被处理的文件内容然后查找被处理的文件中的所有内容,是比较?这里有点迷糊,还希望解答
作者: dikex
时间: 2007-4-7 08:58
Quote: |
Originally posted by wudixin96 at 2007-4-6 01:50 PM:
有没试过啊??for /f "delims=" %%i in (a.txt) do set aa=%%i执行完了才执行后面的句子的。
aa的值是a.txt的最后一行。
起码也得
[code]
for /f "de ... |
|
试过了,没有问题
楼主的要求是:判断该文件中的每行是否都相同
aa的值是a.txt中的最后一行,那只要前面的所有行与最后一行都相同,那这个文件的每一行自然也就相同了;相反如果前面某一行也最后一行不同,那这个文件就不是每行都相同了,根本不需要拿每一行的出来都和其他行比较
作者: flyinspace
时间: 2007-4-7 09:59
Quote: |
Originally posted by lililulula at 2007-4-6 03:40 PM:
5楼的朋友的代码好象有点问题 比如:4567
456
456
... |
|
哦。。的确会这样。
那么就再加多一个for循环就搞定了。
另一个for循环判定是否绝对相等。。
原因是:4567包含了456。
另:因为批处理不支持汉字的拆分+加密工程。。
现在研究vbs中。。
暂时大家给我的短消息都不回了。
研究完vbs再搞这个。