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

[文件操作] [已解决]批处理查找txt文本中以指定字符分割的各字段有重复出现超过6次的则删除该文件

本帖最后由 pcl_test 于 2016-7-14 16:43 编辑

我很想买版主BATCHER推荐给我的图书,因为批处理真的很有用,但是又没法系统的学习,苦恼。谢谢各位。

文件 A.txt 内容:

Moves2D-2E1H-2H1A-0C7J-6H0A-1A6G-6F7A-6C1J-3J1J-0H8A-8B8J-8I0D-0E0J-1J1C-1H2J-4H8B-5B8I-3I5B-5E3I-3F7C-7B0G-0F0E-0F3F-0F1H-1E0F-5F7B-1B1J-2J1B-5B5F-3J1J-5E1E-5E2H-2E0C-1E3J-4I2A-4C2E-2F1A-0A0H-1F5B-1B1F-2H1E-3F4G-4F4D-4E4F-4E5E-5I6H-5F1B-4B2J-3J3F-5G7H-5H4B-4E5F-3E3A-4B3E-1D0A-2A3J-3B2A-3A3B-3A4A-3A2H-4G5I-7I2F-3F7I-7G3F-3E3A-4A1D-2B4A-3A4G-2F7G-7B2F-3D4B-3C3D-5E7B-3B3E-3B6C-4B2B-1J3I-0C3A-3B0C-2D3B-3A2D-3J1J-4E5G-4E5H-8H6D-6E8H-8D6E-6F4H-6F4C-6E8G-8F4B-3D5E-4G4E-5G8F-8E3D-4F2G-2F4F-5D8D-6D3C-4B6F-8H5D-4F8E-7E6E-4C4I-5H4F-5D7E-7D5G-4E6D-6I5D-3C4G-3E4E-3G5J-4I4C-2E2F-2E3C-2E8H-6F3A-3B6I-6A4B-3C6F-4H3G-4E6A-6I5A-4B4H-2F3B-3A7D-7C2E-1C6I-6E1C-3D7C-6C4B-5C6C-6B5C-4B2F-4H3D-1C3E-1D1C-3D6B-5B3D-4F6E-7E4B-5C7E-7D4E-2D4J-3J2D-1F4H-2F1F-2H3J-3I2H-1J3I-3J1J-2H3J-3I2H-1J3I-3J1J-2H3J-3I2H-1J3I-3J1J-2H-CommentsEnd

以上文件中 内容,最后一段有 3J1J 都重复出现了6次,如果出现了就此文件删除。

我的思路是想 定义一个变量 查找 是否有它一样的重复的组合,但是不明白 数字+字母+数字+加字母的 变量如何写?还是可以用查询查找到 -%a%- 一样的就开始统计?

像文件 B.txt 的内容 批处理程序查找到就可以保留此文件, 因为没有相同的 组合 超过出现6次的

Moves7C-4C7J-6H7A-6C8J-7J8A-7A1J-2H1A-0C6G-6F1C-2C0J-1J0A-1A1H-1D7A-7E2J-4H0D-0E1D-1F7E-7G6H-5F1A-1E2G-2F1E-7E7H-7E7G-7J7E-3E7J-7E1J-1H5A-4B3E-3I2C-1C1H-0H6D-6E6F-6E7E-6E0G-0F0E-0F0H-0F1C-2C3I-4I2D-2E1F-1H0C-1E2H-3F1E-2G0F-0E2G-1I2F-2E1I-3H4I-3I4C-4G3J-4I4D-4E2E-2D3H-2F1H-1F2C-4C4J-3J2F-1H3I-2I4C-3C3F-2H6E-6G0E-0H4E-4F0H-1H6A-4C1F-1G4G-4I5J-4I4F-5F2D-2C3C-3E2C-2B6G-3G3J-4J3E-1E1G-0G1E-7E2B-3B2A-0C1H-1C3G-3B1C-4C3B-3C0G-1G4A-5A1G-1A5A-5B4C-4E3C-1C1A-0A7E-7J4I-5J1C-1J2I-2J1J-1A4E-6E6C-4D6E-6D4D-2E0A-0B4B-3C2H-3F1A-1J3F-2D7J-7C6D-6B5B-5A6B-6A5A-5B6A-3A0C-2A3A-3B3C-4B3B-3E5B-5A3E-2E7C-4C4J-3J1J-1C2E-5E4C-5C2J-2A1C-1J4H-2J1J-0J0B-0H5A-4A5E-5F8D-8E0H-1H0J-0A1H-4H4A-5A2D-4C5A-5B5F-6F5C-6C2A-2B4B-3C6F-6C0A-0J4C-3A5B-4B6C-4C4B-3B4C-3C3B-4B3C-4C- CommentsEnd

可是类似不同的组合重复有上千个这样的文档,无法一个个输入查找出重复的未知组合再删除这样的文档。
1

评分人数

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

想到,是不是可以用
  1. for /l %%a in (0,1,6) do del *.txt
复制代码
但是前面判断数字和字母的组合的工作,如何用批处理实现?

TOP

有个经典的  set /a %%a+=1
这个 %%a 就是关键字1J之类的。
如果这个 1J 出现了6次,那么 1J这个变量的值就=6

TOP

第一步: 使用FOR读取 txt
第二步: 将 - | 替换为空格,这样就形成了 元素 列表。
第三步: 使用FOR读取元素列表,set /a 元素+=1
第四步:统计有无>=6的元素。

既然想学批处理,试试写写代码。

TOP

A.txt重复出现3J1J只有5次嘛
带内地用语或带里语的文章,在下读写总觉有点吃力;
如误解了各位意思的讲勿见怪   ^_^

TOP

本帖最后由 Taurus 于 2011-6-26 06:23 编辑

@echo off&setlocal enabledelayedexpansion
set/p var=string^=
for /f "delims=" %%i in (a.txt) do (
    set str=%%i
    set str=!str:-=,!
    for %%i in (!str!) do (
        if "%%i"=="!var!" set/a n+=1
    )
)
if !n! GEQ 6 (set/p=del) else (set/p=keep)
带内地用语或带里语的文章,在下读写总觉有点吃力;
如误解了各位意思的讲勿见怪   ^_^

TOP

6# Taurus
貌似不行,set /p 是要求输入不同的是字符?问题是他随机产生数字和字母组合的,痛苦就痛苦这里。

还是感谢楼上提供的代码,我再研究试试看,希望能找到最后的答案。

TOP

本帖最后由 Taurus 于 2011-6-26 09:31 编辑
6# Taurus
貌似不行,set /p 是要求输入不同的是字符?问题是他随机产生数字和字母组合的,痛苦就痛苦这里。

还是感谢楼上提供的代码,我再研究试试看,希望能找到最后的答案。
playinthesky 发表于 2011-6-26 09:10

甚不行?大於或等於6顯示del,小等6顯示keep,這邊正常顯示
  1. @echo off&setlocal enabledelayedexpansion
  2. set var=3J1J
  3. for /f "delims=" %%i in (a.txt) do (
  4.     set str=%%i
  5.     set str=!str:-=,!
  6.     for %%i in (!str!) do (
  7.         if "%%i"=="!var!" set/a n+=1
  8.     )
  9. )
  10. if !n! GEQ 6 (set/p=del) else (set/p=keep)
复制代码
以上依這句解題:
文件 A.txt 内容:

Moves2D-2E1H-2H1A-0C7J-6H0A-1A6G-6F7A-6C1J-3J1J-0H8A-8B8J-8I0D-0E0J-1J1C-1H2J-4H8B-5B8I-3I5B-5E3I-3F7C-7B0G-0F0E-0F3F-0F1H-1E0F-5F7B-1B1J-2J1B-5B5F-3J1J-5E1E-5E2H-2E0C-1E3J-4I2A-4C2E-2F1A-0A0H-1F5B-1B1F-2H1E-3F4G-4F4D-4E4F-4E5E-5I6H-5F1B-4B2J-3J3F-5G7H-5H4B-4E5F-3E3A-4B3E-1D0A-2A3J-3B2A-3A3B-3A4A-3A2H-4G5I-7I2F-3F7I-7G3F-3E3A-4A1D-2B4A-3A4G-2F7G-7B2F-3D4B-3C3D-5E7B-3B3E-3B6C-4B2B-1J3I-0C3A-3B0C-2D3B-3A2D-3J1J-4E5G-4E5H-8H6D-6E8H-8D6E-6F4H-6F4C-6E8G-8F4B-3D5E-4G4E-5G8F-8E3D-4F2G-2F4F-5D8D-6D3C-4B6F-8H5D-4F8E-7E6E-4C4I-5H4F-5D7E-7D5G-4E6D-6I5D-3C4G-3E4E-3G5J-4I4C-2E2F-2E3C-2E8H-6F3A-3B6I-6A4B-3C6F-4H3G-4E6A-6I5A-4B4H-2F3B-3A7D-7C2E-1C6I-6E1C-3D7C-6C4B-5C6C-6B5C-4B2F-4H3D-1C3E-1D1C-3D6B-5B3D-4F6E-7E4B-5C7E-7D4E-2D4J-3J2D-1F4H-2F1F-2H3J-3I2H-1J3I-3J1J-2H3J-3I2H-1J3I-3J1J-2H3J-3I2H-1J3I-3J1J-2H-CommentsEnd

以上文件中 内容,最后一段有 3J1J 都重复出现了6次,如果出现了就此文件删除。
带内地用语或带里语的文章,在下读写总觉有点吃力;
如误解了各位意思的讲勿见怪   ^_^

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.         set "str=%%a"
  4.         set "str=!str:|=,!"
  5.         for %%b in (!str!) do set /a #%%b+=1
  6. )
  7. set #|findstr /v "#.*=[12345]$" && del a.txt
复制代码
没测试

TOP

本帖最后由 lvsehuaxue 于 2011-6-26 10:10 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (*.txt) do (
  3.     for /f "delims=" %%b in (%%a) do (
  4.         set "str=%%b"
  5.         set "str=!str:-= !"
  6.         for %%i in (!str!) do (
  7.             for %%j in (!str!) do (
  8.                 if "%%i" equ "%%j" set /a n+=1
  9.             )
  10.             if !n! equ 6  del %%a 2>nul
  11.             set n=
  12.         )
  13.     )
  14. )
  15. pause
复制代码
经测试可用
1

评分人数

TOP

TOP

本帖最后由 playinthesky 于 2011-6-26 21:36 编辑

10# lvsehuaxue
很不好意思,我之前的问题中您的确是对的,说一声谢谢。

TOP

本帖最后由 playinthesky 于 2011-6-26 21:37 编辑

6# Taurus
谢谢,是我自己弄不清楚,我还以为是你的代码不对,其实是在文件名内也含有 “-”造成的,请原谅我的愚鲁。

TOP

11# Hello123World
我会去看的。谢谢推荐。

TOP

  1. //&cls&dir /a-d/b *.txt|cscript -nologo -e:jscript "%~f0"&pause&exit
  2. var fso = new ActiveXObject('Scripting.Filesystemobject');
  3. var s='';
  4. while(!WSH.StdIn.AtEndOfStream){
  5.     var file = WSH.StdIn.ReadLine();
  6.     try{
  7.         var arr={};
  8.         var str = fso.OpenTextFile(file, 1).ReadAll().split('-');
  9.         for(var i=0; i<str.length; i++){
  10.             arr[str[i]]?arr[str[i]]++:arr[str[i]]=1;
  11.             if(arr[str[i]] >= 6){
  12.                 s+=fso.GetFile(file).Name+'|'+str[i]+'\r\n';
  13.                 break;
  14.             }
  15.         }
  16.         arr=null;
  17.     }catch(e){}
  18. }
  19. WSH.Echo(s);
复制代码

TOP

返回列表