标题: [文本处理] [已解决]BAT如何批量删除文本重复的内容,只保留第一个? [打印本页]
作者: lateol 时间: 2012-11-13 19:02 标题: [已解决]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都删掉。
作者: apang 时间: 2012-11-13 22:31
保存为vbs,与要修改的TXT放在一起,试试- Set FSO = CreateObject("Scripting.FileSystemObject")
- If Not Fso.FolderExists("New") Then
- FSO.CreateFolder("New")
- End If
- For Each File In FSO.GetFolder(".").Files
- Ext = FSO.GetExtensionName(File)
- If Lcase(Ext) = "txt" Then ModifyText File
- Next
- MsgBox "OK"
-
- Sub ModifyText(F)
- Text = FSO.OpenTextFile(F,1).ReadAll
- A = Split(Text,"G5.1Q1")
- Str = A(0) & "G5.1Q1" & A(1)
- FSO.CreateTextFile("New\"&F.Name,True).Write Str
- End Sub
复制代码
作者: lateol 时间: 2012-11-13 23:31
回复 2# apang
感谢您的帮助,测试了一下,运行出现OK 但是似乎没 反应 文本没得到处理,麻烦检查一下是不是漏了那?
还有 能实现cmd处理么?
作者: apang 时间: 2012-11-13 23:43
回复 3# lateol
生成的文件在New文件夹里,先看看是不是你想要的结果。如果含特殊字符,目测bat有难度
作者: lateol 时间: 2012-11-13 23:57
回复 4# apang
再测试了 一下 ,保留了第一个,但在第二个的时候 怎么以下的内容都不见了.
要的效果只保留第一个G5.1Q1 其他多余的G5.1Q1 都去掉。
作者: apang 时间: 2012-11-14 00:18
本帖最后由 apang 于 2012-11-14 00:22 编辑
回复 5# lateol
第二个文本实际内容贴出来看看,最好将需要保留的内容用颜色区分。
话说顶楼表达的不明确,到底是只保留G5.1Q1这一行,还是G5.1Q1和它下面的几行?
我猜测的:保留第一个G5.1Q1前面和它下面的几行第二个G5.1Q1为止。
作者: lateol 时间: 2012-11-14 00:29
只保留 第一个 其他都删掉。如下效果。
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
G5.1Q1
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
作者: lateol 时间: 2012-11-14 00:33
回复 6# apang
只保留 第一个 其他都删掉。如下效果。
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
G5.1Q1
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
作者: apang 时间: 2012-11-14 01:52
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
- (for /f "usebackq delims=" %%b in ("%%a") do (
- if "%%b"=="G5.1Q1" (
- set /a n+=1
- if "!n!"=="1" (echo,%%b) else echo,
- ) else echo,%%b
- ))>$
- Move $ "%%a"&set "n="
- )
- pause
复制代码
再试试~~
作者: lateol 时间: 2012-11-14 02:23
回复 9# apang
ok! 谢谢!成功了。
作者: apang 时间: 2012-11-14 10:14
- @echo off
- for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
- (for /f "usebackq delims=" %%b in ("%%a") do (
- if not defined _%%b (echo,%%b) else echo,
- if "%%b"=="G5.1Q1" set "_G5.1Q1=1"
- ))>$
- Move $ "%%a"&set "_G5.1Q1="
- )
- pause
复制代码
9#弄复杂了~~
作者: lateol 时间: 2012-11-14 11:02
回复 11# apang
呵呵 谢谢!
作者: lateol 时间: 2012-11-15 00:52
回复 11# apang
还有一个问题请教你一下,它现在是处理当前目录的文件,能否调换一下 如:处理当前目录的 abc文件夹内的txt文件? 因为我想配合其他bat命令。麻烦了。。
作者: apang 时间: 2012-11-15 10:13
回复 13# lateol
第一行与第二行之间插入:pushd "abc\"
最后一句改成:popd&pause
作者: lateol 时间: 2012-11-15 10:19
回复 14# apang
好了 非常感谢!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |