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

[文本处理] [已解决]BAT如何批量删除文本重复的内容,只保留第一个?

[复制链接]
发表于 2012-11-13 19:02:57 | 显示全部楼层 |阅读模式
比如说我有以下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都删掉。

评分

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

查看全部评分

发表于 2012-11-13 22:31:30 | 显示全部楼层
保存为vbs,与要修改的TXT放在一起,试试

  1. Set FSO = CreateObject("Scripting.FileSystemObject")
  2. If Not Fso.FolderExists("New") Then
  3.    FSO.CreateFolder("New")
  4. End If
  5. For Each File In FSO.GetFolder(".").Files
  6.    Ext = FSO.GetExtensionName(File)
  7.    If Lcase(Ext) = "txt" Then ModifyText File
  8. Next
  9. MsgBox "OK"

  10. Sub ModifyText(F)
  11.    Text = FSO.OpenTextFile(F,1).ReadAll
  12.    A = Split(Text,"G5.1Q1")
  13.    Str = A(0) & "G5.1Q1" & A(1)
  14.    FSO.CreateTextFile("New"&F.Name,True).Write Str
  15. End Sub
复制代码
 楼主| 发表于 2012-11-13 23:31:02 | 显示全部楼层
回复 2# apang


    感谢您的帮助,测试了一下,运行出现OK 但是似乎没 反应 文本没得到处理,麻烦检查一下是不是漏了那?
还有 能实现cmd处理么?
发表于 2012-11-13 23:43:22 | 显示全部楼层
回复 3# lateol


    生成的文件在New文件夹里,先看看是不是你想要的结果。如果含特殊字符,目测bat有难度
 楼主| 发表于 2012-11-13 23:57:21 | 显示全部楼层
回复 4# apang


    再测试了 一下 ,保留了第一个,但在第二个的时候 怎么以下的内容都不见了.
要的效果只保留第一个G5.1Q1  其他多余的G5.1Q1 都去掉。
发表于 2012-11-14 00:18:27 | 显示全部楼层
本帖最后由 apang 于 2012-11-14 00:22 编辑

回复 5# lateol


    第二个文本实际内容贴出来看看,最好将需要保留的内容用颜色区分。
话说顶楼表达的不明确,到底是只保留G5.1Q1这一行,还是G5.1Q1和它下面的几行?
我猜测的:保留第一个G5.1Q1前面和它下面的几行第二个G5.1Q1为止。
 楼主| 发表于 2012-11-14 00:29:45 | 显示全部楼层
只保留 第一个 其他都删掉。如下效果。
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
G5.1Q1
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
 楼主| 发表于 2012-11-14 00:33:06 | 显示全部楼层
回复 6# apang


    只保留 第一个 其他都删掉。如下效果。
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
G5.1Q1
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
发表于 2012-11-14 01:52:24 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
  3.   (for /f "usebackq delims=" %%b in ("%%a") do (
  4.     if "%%b"=="G5.1Q1" (
  5.       set /a n+=1
  6.       if "!n!"=="1" (echo,%%b) else echo,
  7.     ) else echo,%%b
  8.   ))>$
  9.   Move $ "%%a"&set "n="
  10. )
  11. pause
复制代码
再试试~~

评分

参与人数 1技术 +1 收起 理由
lateol + 1 问题已解决。感谢帮助我的人。

查看全部评分

 楼主| 发表于 2012-11-14 02:23:05 | 显示全部楼层
回复 9# apang


    ok! 谢谢!成功了。
发表于 2012-11-14 10:14:07 | 显示全部楼层
  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
  3.   (for /f "usebackq delims=" %%b in ("%%a") do (
  4.     if not defined _%%b (echo,%%b) else echo,
  5.     if "%%b"=="G5.1Q1" set "_G5.1Q1=1"
  6.   ))>$
  7.   Move $ "%%a"&set "_G5.1Q1="
  8. )
  9. pause
复制代码
9#弄复杂了~~
 楼主| 发表于 2012-11-14 11:02:49 | 显示全部楼层
回复 11# apang


    呵呵 谢谢!
 楼主| 发表于 2012-11-15 00:52:07 | 显示全部楼层
回复 11# apang


    还有一个问题请教你一下,它现在是处理当前目录的文件,能否调换一下 如:处理当前目录的 abc文件夹内的txt文件? 因为我想配合其他bat命令。麻烦了。。
发表于 2012-11-15 10:13:12 | 显示全部楼层
回复 13# lateol


    第一行与第二行之间插入:pushd "abc\"
最后一句改成:popd&pause

评分

参与人数 1技术 +1 收起 理由
stance + 1 乐于助人

查看全部评分

 楼主| 发表于 2012-11-15 10:19:18 | 显示全部楼层
回复 14# apang


    好了 非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 19:09 , Processed in 0.021526 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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