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

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

比如说我有以下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都删掉。
1

评分人数

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

回复 14# apang


    好了 非常感谢!

TOP

回复 13# lateol


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

评分人数

TOP

回复 11# apang


    还有一个问题请教你一下,它现在是处理当前目录的文件,能否调换一下 如:处理当前目录的 abc文件夹内的txt文件? 因为我想配合其他bat命令。麻烦了。。

TOP

回复 11# apang


    呵呵 谢谢!

TOP

  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#弄复杂了~~

TOP

回复 9# apang


    ok! 谢谢!成功了。

TOP

  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

评分人数

    • lateol: 问题已解决。感谢帮助我的人。技术 + 1

TOP

回复 6# apang


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

xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx

TOP

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

xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx

TOP

本帖最后由 apang 于 2012-11-14 00:22 编辑

回复 5# lateol


    第二个文本实际内容贴出来看看,最好将需要保留的内容用颜色区分。
话说顶楼表达的不明确,到底是只保留G5.1Q1这一行,还是G5.1Q1和它下面的几行?
我猜测的:保留第一个G5.1Q1前面和它下面的几行第二个G5.1Q1为止。

TOP

回复 4# apang


    再测试了 一下 ,保留了第一个,但在第二个的时候 怎么以下的内容都不见了.
要的效果只保留第一个G5.1Q1  其他多余的G5.1Q1 都去掉。

TOP

回复 3# lateol


    生成的文件在New文件夹里,先看看是不是你想要的结果。如果含特殊字符,目测bat有难度

TOP

回复 2# apang


    感谢您的帮助,测试了一下,运行出现OK 但是似乎没 反应 文本没得到处理,麻烦检查一下是不是漏了那?
还有 能实现cmd处理么?

TOP

保存为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
复制代码

TOP

返回列表