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

[文本处理] 根据一个文本列出的字符串/行内容,排除/去掉/删除另一个文本相同的内容/提取不同内容

本帖最后由 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的内容里面包括只有路径没有文件名称的排除项,也希能匹配到路径(这两个过滤可以分开也可以是一个方案解决也可以)

我写的一个:
  1. findstr /irbvG:"2.txt" 1.txt>>1.txt
复制代码
但是代码不对,达不到效果
1

评分人数

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

谢谢各位了!

TOP

回复 6# freesoft00
  1. @echo off & setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in ('type "1.txt"') do (
  3. set n=0
  4. for /f "delims=" %%b in ('type "2.txt"') do (
  5. if "%%a" equ "%%b" set n=1
  6. )
  7. if !n! neq 1 echo,%%a
  8. ))>"3.txt"
  9. ::move "3.txt" "1.txt"
  10. pause
复制代码

TOP

回复 12# cobat


    中文真是个痛点

TOP

本帖最后由 pcl_test 于 2015-3-25 23:48 编辑

回复 8# freesoft00
findstr单条关键词上限255,find似乎没有上限
  1. @echo off
  2. set a=1
  3. set n=1
  4. :loop
  5. findstr "%a%" %0 >nul
  6. echo %n%
  7. echo findstr "%a%"
  8. set a=%a%1
  9. set /a n+=1
  10. goto loop
复制代码
  1. @echo off
  2. set a=1
  3. set n=1
  4. :loop
  5. find "%a%" %0 >nul
  6. echo %n%
  7. echo find "%a%"
  8. set a=%a%1
  9. set /a n+=1
  10. goto loop
复制代码

TOP

文本中有空格,有斜杠,有中文字符,就是符合路径和文件名的都可以有。

TOP

应该这样也可以把,文本去重,我看到原来论坛中有文本去重的批处理。
第一步读取文本2。
第二部读取文本1中不包括文本2的内容,然后导出其值到文本3,
第三部然后合并文本2的内容到导出的文本3中。
因为我的问题是排除,所以不用第三部就可以了。

如果方便请给出具体的代码。
这样就不用findstr了。

TOP

回复 10# apang


    还是你对

TOP

本帖最后由 apang 于 2015-3-25 23:29 编辑

好吧,7#仅仅转义斜杠字符不行,其它特殊字符也得转义,蛋疼

直接vbs好了
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set file = fso.OpentextFile("1.txt")
  3. s = fso.OpenTextFile("2.txt").ReadAll
  4. s = vbCrLf & LCase(s) & vbCrLf
  5. while Not file.AtEndOfStream
  6.         s1 = file.ReadLine
  7.         If InStr(s, vbCrLf & LCase(s1) & vbCrLf) = 0 Then
  8.                  s2 = s2 & s1 & vbCrLf
  9.         End If
  10. wend
  11. fso.OpentextFile("3.txt", 2, true).Write s2
复制代码
1

评分人数

TOP

回复 9# cobat


    楼主的意思好像是2.txt含中文字符时不行

TOP

本帖最后由 cobat 于 2015-3-25 23:41 编辑
回复  cobat


    还是不行。
排除的文件路径中有空格达不到排除的效果。其文本内容如下:
freesoft00 发表于 2015-3-25 02:16


    我这里可以

TOP

回复 7# apang


    findstr过滤的项目是不是有字节限制,提示这样:
FINDSTR: 搜索字符串太长

TOP

一定要用 findstr 的话,这样试下:
  1. @echo off
  2. (for /f "delims=" %%a in (2.txt) do (
  3.         set "s=%%a"
  4.         setlocal enabledelayedexpansion
  5.         echo,!s:\=\\!
  6.         endlocal
  7. ))>$
  8. more 1.txt|findstr /irxvg:$>3.txt
  9. del $
  10. pause
复制代码

TOP

回复 3# cobat


    还是不行。
排除的文件路径中有空格达不到排除的效果。其文本内容如下:
  1. C:\WINDOWS\system32\config\systemprofile\Local Settings\Temporary Internet Files\Content.IE5\2N04V8MU\desktop.ini
  2. C:\WINDOWS\system32\config\systemprofile\Local Settings\Temporary Internet Files\Content.IE5\7XEV1GUV\desktop.ini
  3. C:\WINDOWS\system32\config\systemprofile\Local Settings\Temporary Internet Files\Content.IE5\BTLVJPL2\desktop.ini
  4. C:\WINDOWS\system32\config\systemprofile\Local Settings\Temporary Internet Files\Content.IE5\ZJ4R5M2P\desktop.ini
  5. C:\WINDOWS\system32\config\systemprofile\「开始」菜单\desktop.ini
  6. C:\WINDOWS\system32\config\systemprofile\「开始」菜单\程序\desktop.ini
  7. C:\WINDOWS\system32\config\systemprofile\「开始」菜单\程序\附件\desktop.ini
复制代码

TOP

回复 3# cobat


    这个好像是可以了。

TOP

返回列表