找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 32007|回复: 11

[文本处理] [已解决]批处理如何删除多个文本里某个重复的指定字符串

[复制链接]
发表于 2012-11-20 04:38:11 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-11-10 23:03 编辑

非常感谢 apang 以下是他提供的代码,但是在处理太大的文本还是有些缓慢
40M的文件要处理1分钟.
求各位高手帮忙改改  可以另写。但要求效率要好。谢谢!
  1. @echo off
  2. pushd "abc"
  3. for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
  4.   (for /f "usebackq delims=" %%b in ("%%a") do (
  5.     if not defined _%%b (echo,%%b) else echo,
  6.     if "%%b"=="G5.1Q1" set "_G5.1Q1=1"
  7.   ))>$
  8.   Move $ "%%a"&set "_G5.1Q1="
  9. )
  10. popd&pause
复制代码
批量效果如下:
比如说我有以下TXT:
xxx.txt, xxx.txt, xxx.txt, xxx.txt

内容都有如下:
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
G5.1Q1
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
G5.1Q1
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
G5.1Q1
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
要的效果只保留第一个G5.1Q1  其他多余的G5.1Q1 都去掉。
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
G5.1Q1
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-11-20 08:39:43 | 显示全部楼层
大文本还是选择第三方工具吧,批处理太吃力了,代码本身已没什么可优化的了。
 楼主| 发表于 2012-11-20 09:07:58 | 显示全部楼层
回复 2# FOR


    哦 那第三方命令程序有没?或则你介绍个第三方工具给我吧谢谢。
发表于 2012-11-20 12:14:08 | 显示全部楼层
  1. @echo off

  2. for /f "delims=" %%a in ('dir /a:-d /b *.txt') do (
  3.     gawk "{if ($0 == "G5.1Q1") {if (!n) print; n = 1} else {print}}" "%%a" >.tmp
  4.     move .tmp "%%a"
  5. )

  6. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
lateol + 1 呵呵 要的就是这种效率!

查看全部评分

 楼主| 发表于 2012-11-20 21:00:21 | 显示全部楼层
回复 4# tmplinshi


    gawk 不是内部命令
发表于 2012-11-20 21:21:56 | 显示全部楼层
回复 5# lateol

http://ossh.com/gnu-win32/gawk.exe
 楼主| 发表于 2012-11-20 22:19:48 | 显示全部楼层
回复 6# tmplinshi


    嗯 谢谢 可以用了 。不过发现个问题。
为什么我有一个3M的文件 处理后 成了71k ?
麻烦看看是什么原因。
下面是那个文本的文件 上传了百度云盘。
http://pan.baidu.com/share/link?shareid=145874&uk=774360720
 楼主| 发表于 2012-11-20 22:33:15 | 显示全部楼层
回复 8# tmplinshi


    已经下好用了。可以用。但是处理出现点异常。
发表于 2012-11-20 22:50:23 | 显示全部楼层
回复  tmplinshi


    嗯 谢谢 可以用了 。不过发现个问题。
为什么我有一个3M的文件 处理后 成了71k ...
lateol 发表于 2012-11-20 22:19



第 4383 行的开头有一个十六进制为 0x1a 的字符,gawk 处理到这个字符就停止了。

这个字符就是你的帖子 [已解决]如何处理删除文本特殊号“” 中提到的。
 楼主| 发表于 2012-11-20 23:24:15 | 显示全部楼层
回复 9# tmplinshi


    哦  我明白了,谢谢你的提醒!问题已经解决!
在 前面添加fr语句 吧 16进制的字符都删掉。这样就不会终止了
  1. @echo off
  2. pushd "==NC=="
  3. fr *.txt -r:"***:\r\n\x1a\r\n" -t:"\r\n"
  4. for /f "delims=" %%a in ('dir /a:-d /b *.txt') do (
  5.     gawk "{if ($0 == "G5.1Q1") {if (!n) print; n = 1} else {print}}" "%%a" >.tmp
  6.     move .tmp "%%a"
  7. )
  8. pause
复制代码
发表于 2012-11-27 00:23:12 | 显示全部楼层
真要批处理来做也行....
  1. @echo off & setlocal enabledelayedexpansion

  2. set count=
  3. For /f "delims=" %%a in (e.txt) do ( If %%a equ G5.1Q1 (Set/a count+=1& If !count! equ 1 (Echo %%a>>e1.txt) ) Else Echo %%a>>e1.txt)
复制代码
但是效率很低下....
发表于 2012-12-8 09:51:32 | 显示全部楼层
為何不對比MD5或文件大少?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 19:53 , Processed in 0.034915 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表