标题: [文本处理] 根据一个文本列出的字符串/行内容,排除/去掉/删除另一个文本相同的内容/提取不同内容 [打印本页]
作者: freesoft00 时间: 2015-3-24 13:53 标题: 根据一个文本列出的字符串/行内容,排除/去掉/删除另一个文本相同的内容/提取不同内容
本帖最后由 pcl_test 于 2017-4-13 09:29 编辑
批处理命令findstr完全匹配,过滤内容来自文件
1.txt的内容
C:\Autoruns.13.02.chs.th_sjy.exe
C:\Program Files\Autoruns.13.02.chs.th_sjy.exe
D:\Autoruns.13.02.chs.th_sjy.exe
D:\ss\Autoruns.13.02.chs.th_sjy.exe
D:\TMACv6.0.6_Setup\Autoruns.13.02.chs.th_sjy.exe
D:\tt\Autoruns.13.02.chs.th_sjy.exe
G:\Autoruns.13.02.chs.th_sjy.exe
2.txt的内容
D:\ss\Autoruns.13.02.chs.th_sjy.exe
想把2.txt包含的内容作为排除想,把1.txt种包括的过滤掉,不区分大小写,全路径配备,
如果2.txt的内容里面包括只有路径没有文件名称的排除项,也希能匹配到路径(这两个过滤可以分开也可以是一个方案解决也可以)
我写的一个:- findstr /irbvG:"2.txt" 1.txt>>1.txt
复制代码
但是代码不对,达不到效果
作者: DAIC 时间: 2015-3-24 15:36
findstr命令不靠谱,推荐使用grep命令:- grep -ivxFf 2.txt 1.txt > 3.txt
复制代码
作者: cobat 时间: 2015-3-24 15:41
把r改成l- findstr /ilbvG:"2.txt" 1.txt>>1.txt
复制代码
作者: freesoft00 时间: 2015-3-24 15:52
回复 2# DAIC
谢谢,主要是不想用第三方软件了,还得下载,这个自带,如果第二条无法满足,那么能满足第一条也可以
想把2.txt包含的内容作为排除想,把1.txt种包括的过滤掉,不区分大小写,全路径配备,
作者: freesoft00 时间: 2015-3-24 15:57
回复 3# cobat
这个好像是可以了。
作者: freesoft00 时间: 2015-3-25 02:16
回复 3# cobat
还是不行。
排除的文件路径中有空格达不到排除的效果。其文本内容如下:- C:\WINDOWS\system32\config\systemprofile\Local Settings\Temporary Internet Files\Content.IE5\2N04V8MU\desktop.ini
- C:\WINDOWS\system32\config\systemprofile\Local Settings\Temporary Internet Files\Content.IE5\7XEV1GUV\desktop.ini
- C:\WINDOWS\system32\config\systemprofile\Local Settings\Temporary Internet Files\Content.IE5\BTLVJPL2\desktop.ini
- C:\WINDOWS\system32\config\systemprofile\Local Settings\Temporary Internet Files\Content.IE5\ZJ4R5M2P\desktop.ini
- C:\WINDOWS\system32\config\systemprofile\「开始」菜单\desktop.ini
- C:\WINDOWS\system32\config\systemprofile\「开始」菜单\程序\desktop.ini
- C:\WINDOWS\system32\config\systemprofile\「开始」菜单\程序\附件\desktop.ini
复制代码
作者: apang 时间: 2015-3-25 09:23
一定要用 findstr 的话,这样试下:- @echo off
- (for /f "delims=" %%a in (2.txt) do (
- set "s=%%a"
- setlocal enabledelayedexpansion
- echo,!s:\=\\!
- endlocal
- ))>$
- more 1.txt|findstr /irxvg:$>3.txt
- del $
- pause
复制代码
作者: freesoft00 时间: 2015-3-25 21:34
回复 7# apang
findstr过滤的项目是不是有字节限制,提示这样:
FINDSTR: 搜索字符串太长
作者: cobat 时间: 2015-3-25 21:44
本帖最后由 cobat 于 2015-3-25 23:41 编辑
回复 cobat
还是不行。
排除的文件路径中有空格达不到排除的效果。其文本内容如下:
freesoft00 发表于 2015-3-25 02:16
我这里可以
作者: apang 时间: 2015-3-25 23:17
回复 9# cobat
楼主的意思好像是2.txt含中文字符时不行
作者: apang 时间: 2015-3-25 23:21
本帖最后由 apang 于 2015-3-25 23:29 编辑
好吧,7#仅仅转义斜杠字符不行,其它特殊字符也得转义,蛋疼
直接vbs好了- Set fso = CreateObject("Scripting.FileSystemObject")
- Set file = fso.OpentextFile("1.txt")
- s = fso.OpenTextFile("2.txt").ReadAll
- s = vbCrLf & LCase(s) & vbCrLf
- while Not file.AtEndOfStream
- s1 = file.ReadLine
- If InStr(s, vbCrLf & LCase(s1) & vbCrLf) = 0 Then
- s2 = s2 & s1 & vbCrLf
- End If
- wend
- fso.OpentextFile("3.txt", 2, true).Write s2
复制代码
作者: cobat 时间: 2015-3-25 23:22
回复 10# apang
还是你对
作者: freesoft00 时间: 2015-3-25 23:36
应该这样也可以把,文本去重,我看到原来论坛中有文本去重的批处理。
第一步读取文本2。
第二部读取文本1中不包括文本2的内容,然后导出其值到文本3,
第三部然后合并文本2的内容到导出的文本3中。
因为我的问题是排除,所以不用第三部就可以了。
如果方便请给出具体的代码。
这样就不用findstr了。
作者: freesoft00 时间: 2015-3-25 23:40
文本中有空格,有斜杠,有中文字符,就是符合路径和文件名的都可以有。
作者: pcl_test 时间: 2015-3-25 23:45
本帖最后由 pcl_test 于 2015-3-25 23:48 编辑
回复 8# freesoft00
findstr单条关键词上限255,find似乎没有上限- @echo off
- set a=1
- set n=1
- :loop
- findstr "%a%" %0 >nul
- echo %n%
- echo findstr "%a%"
- set a=%a%1
- set /a n+=1
- goto loop
复制代码
- @echo off
- set a=1
- set n=1
- :loop
- find "%a%" %0 >nul
- echo %n%
- echo find "%a%"
- set a=%a%1
- set /a n+=1
- goto loop
复制代码
作者: CrLf 时间: 2015-3-26 00:24
回复 12# cobat
中文真是个痛点
作者: pcl_test 时间: 2015-3-26 11:20
回复 6# freesoft00 - @echo off & setlocal enabledelayedexpansion
- (for /f "delims=" %%a in ('type "1.txt"') do (
- set n=0
- for /f "delims=" %%b in ('type "2.txt"') do (
- if "%%a" equ "%%b" set n=1
- )
- if !n! neq 1 echo,%%a
- ))>"3.txt"
- ::move "3.txt" "1.txt"
- pause
复制代码
作者: freesoft00 时间: 2015-3-26 11:36
谢谢各位了!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |