中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]批量删除具有相同文本格式文件中的一部分
作者:
标题: [求助]批量删除具有相同文本格式文件中的一部分 上一主题 | 下一主题
lqs623
贫困用户





积分 -3
发帖 30
注册 2007-8-13
状态 离线
『楼 主』:  [求助]批量删除具有相同文本格式文件中的一部分

即批量提取具有相同文本格式文件中的一段,各自保存为原文件名的文件,或各自保存为包含原文名的文件。格式如下:(也是说明)

第一:
┌──────────────────────────────────────────────────┐
|有很多个文件都有“ 第一: 第二: 第三:”的这种格式,只提取从“第二:”开始到“第三:”以前的内容, |
|(大批量文件提取)各自的文件名不改名。或各自的文件名包含各自的原文名也可。                          |
└──────────────────────────────────────────────────┘
R*1
第二:
┌───────────────────────────────────────────────────┐
|或者叫批量删除具有相同文本格式文件中的一部分,只保留其中的一段,文件较大需提取的内容较少(要考虑速度)|
|是大批量文件处理。在各自原文上删除,即各自的文件名不改名。或各自的文件名包含各自的原文名也可。        |
└───────────────────────────────────────────────────┘
R*2
第三:
┌─────────────────────────────────────────────────┐
|也就是说,很多个文件都有“ 第一: 第二: 第三:”的这种格式,在各自的文件上保存要的内容,删除不要 |
|的内容,各自的文件名不变。或各自的文件名包含各自的原文名也可。(大批量处理)                      |
└─────────────────────────────────────────────────┘
R*3
用以下批处理执行以上内容保存的aa.txt,能生成手工加上的文件名文件三个txt(注:上面的R*1.R*2.R*3原文中没有)
for /f "tokens=1,2 delims=*" %%f in (aa.txt) do @if "%%f"=="R" (ren temp %%g.txt) else (echo %%f>>temp)

2010-4-8 19:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 2 楼』:  

你的问题说的不够清楚...反正我看迷糊了...



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-4-8 23:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lqs623
贫困用户





积分 -3
发帖 30
注册 2007-8-13
状态 离线
『第 3 楼』:  

补充说明:有多个txt文件都有“ 第一. 第二. 第三.”的这种格式(也就是都含有 “第一 第二  第三 ”字符),文件如下:

第一
┌──────────────────────────────────────────────────┐
|有很多个文件都有“ 第一 第二 第三 ”的这种格式,只提取从“第二:”开始到“第三:”以前的内容,      |
|(大批量文件提取)各自的文件名不改名。或各自的文件名包含各自的原文名也可。                          |
└──────────────────────────────────────────────────┘
第二
┌───────────────────────────────────────────────────┐
|或者叫批量删除具有相同文本格式文件中的一部分,只保留其中的一段,文件较大需提取的内容较少(要考虑速度)|
|是大批量文件处理。在各自原文上删除,即各自的文件名不改名。或各自的文件名包含各自的原文名也可。        |
└───────────────────────────────────────────────────┘
第三
┌─────────────────────────────────────────────────┐
|也就是说,很多个文件都有“ 第一: 第二: 第三:”的这种格式,在各自的文件上保存要的内容,删除不要 |
|的内容,各自的文件名不变。或各自的文件名包含各自的原文名也可。(大批量处理)                      |
└─────────────────────────────────────────────────┘


以上是要处理的原文,在各个文件里都有“第一 第二 第三 字符”只是边框里的内容不同

问题:要对这些txt文件做到在原文件里(文件名不变)(有很多个txt文件同时处理)只保留一段如下:

第二
┌───────────────────────────────────────────────────┐
|或者叫批量删除具有相同文本格式文件中的一部分,只保留其中的一段,文件较大需提取的内容较少(要考虑速度)|
|是大批量文件处理。在各自原文上删除,即各自的文件名不改名。或各自的文件名包含各自的原文名也可。        |
└───────────────────────────────────────────────────┘

[ Last edited by lqs623 on 2010-4-9 at 09:40 ]

2010-4-9 09:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 4 楼』:  

1,批处理放到工作目录下!
2,工作目录中除需要被处理的.txt文件外,不应有其他.txt文件!
3,操作前最好将所有被处理的文件备份!

如果文件中不含指定内容,则文件将被清空,且不保留原文件中的空行,并删除所有以 ; 开头的行,则:
@echo off&setlocal enabledelayedexpansion
for %%a in (*.txt) do set n=0&for /f "usebackq delims=" %%b in ("%%a") do (set b=%%b
if "!b:~0,2!"=="第二" set n=1
if "!b:~0,2!"=="第三" set n=0
if !n!==1 echo.%%b)>>"%%~na.hanyeguxing"
del /a/f/q *.txt
ren *.hanyeguxing *.txt
如果要保留原文件中的空行、以 ; 开头的行,则
@echo off&setlocal enabledelayedexpansion
for %%a in (*.txt) do set n=0&for /f "eol= delims=" %%b in ('findstr /n .* "%%a"') do (
set b=%%b&set b=!b:*:=!
if "!b:~0,2!"=="第二" set n=1
if "!b:~0,2!"=="第三" set n=0
if !n!==1 echo.!b!)>>"%%~na.hanyeguxing"
del /a/f/q *.txt
ren *.hanyeguxing *.txt
如果如果要保留原文件中的空行、以 ; 开头的行,
且如果原文件中不含指定内容,还需要保留此文件,则
@echo off&setlocal enabledelayedexpansion
for %%a in (*.txt) do (set n=0&set m=0
for /f "eol= delims=" %%b in ('findstr /n .* "%%a"') do (
set b=%%b&set b=!b:*:=!
if "!b:~0,2!"=="第二" set n=1&set m=1
if "!b:~0,2!"=="第三" set n=0
if !n!==1 echo.!b!)>>"%%~na.hanyeguxing"
if !m!==0 copy "%%a" "%%~na.hanyeguxing")
del /a/f/q *.txt
ren *.hanyeguxing *.txt
[ Last edited by Hanyeguxing on 2010-4-9 at 17:01 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-4-9 14:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lqs623
贫困用户





积分 -3
发帖 30
注册 2007-8-13
状态 离线
『第 5 楼』:  

补充说明:有多个txt文件都有“ 第一. 第二. 第三.”的这种格式(也就是都含有 “第一 第二  第三 ”字符),文件如下:
第一个文件是如下:

第一
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
zzzzzzzzzzzzzzzzzzzzz
┌──────────────────────────────────────────────────┐
|有很多个文件都有“ 第一 第二 第三 ”的这种格式,只提取从“第二:”开始到“第三:”以前的内容,      |
|(大批量文件提取)各自的文件名不改名。或各自的文件名包含各自的原文名也可。                          |
└──────────────────────────────────────────────────┘
yyyyyyyyyyyyyyyyyyyyyyyyyyyyy
第二
┌─xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx───
xxxxxxxxxxxxxxxxx或者叫批量删除具有相同文本格式文件中的一部分,只保留其中的一段,文件较大需提取的内容较少(要考虑速度)x
|是大批量文件处理。在各自原文上删除,即各自的文件名不改名。或各自的文件名包含各自的原文名也可。        x
└───────────xxxxxxxxxxxxxxxxx───────────────────────────────x
yyyyyyyyyyyyyyyyyyyyyyyyyy
第三
┌─────────────────────────────────────────────────┐
|也就是说,很多个文件都有“ 第一: 第二: 第三:”的这种格式,在各自的文件上保存要的内容,删除不要 |
|的内容,各自的文件名不变。或各自的文件名包含各自的原文名也可。(大批量处理)                      |
└─────────────────────────────────────────────────┘

第二个文件是如下:(说明:在各个文件中从“第一”到“第二”所处的段落不一定,字符长短不一样,格式不一样)


第一

xxxxxxxxxxx

yyyyyyyyyyyyyyy
|有很多个文件都有“ 第一 第二 第三 ”的这种格式,只提取从“第二:”开始到“第三:”以前的内容,      
|(大批量文件提取)各自的文件名不改名。或各自的文件名包含各自的原文名也可。                        
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


第二
(================================================================================================
(或者叫批量删除具有相同文本格式文件中的一部分,只保留其中的一段,文件较大需提取的内容较少度)}
(是大批量文件处理。在各自原文上删除,即各自的文件名不改名。或各自的文件名包含各自的原文名也可。  

((大批量文件提取)各自的文件名不改名。或各自的文件名包含各自的原文名也可。               
((大批量文件提取)各自的文件名不改名。或各自的文件名包含各自的原文名也可。              
└8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
xxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyyy

第三
┌─────────────────────────────────────────────────┐
|也就是说,很多个文件都有“ 第一: 第二: 第三:”的这种格式,在各自的文件上保存要的内容,删除不要 |
|的内容,各自的文件名不变。或各自的文件名包含各自的原文名也可。(大批量处理)                      |
└─────────────────────────────────────────────────┘

需要得到第一个文件是:

第二
┌─xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx───
xxxxxxxxxxxxxxxxx或者叫批量删除具有相同文本格式文件中的一部分,只保留其中的一段,文件较大需提取的内容较少(要考虑速度)x
|是大批量文件处理。在各自原文上删除,即各自的文件名不改名。或各自的文件名包含各自的原文名也可。        x
└───────────xxxxxxxxxxxxxxxxx───────────────────────────────x
yyyyyyyyyyyyyyyyyyyyyyyyyy

需要得到第二个文件是:(有没有空行都行)

第二
(================================================================================================
(或者叫批量删除具有相同文本格式文件中的一部分,只保留其中的一段,文件较大需提取的内容较少度)}
(是大批量文件处理。在各自原文上删除,即各自的文件名不改名。或各自的文件名包含各自的原文名也可。  

((大批量文件提取)各自的文件名不改名。或各自的文件名包含各自的原文名也可。               
((大批量文件提取)各自的文件名不改名。或各自的文件名包含各自的原文名也可。              
└8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
xxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyyy

2010-4-9 16:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 6 楼』:  

上面写了3个P脚本,你根据情况自己选呗



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-4-9 16:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lqs623
贫困用户





积分 -3
发帖 30
注册 2007-8-13
状态 离线
『第 7 楼』:  

非常感谢你都做到了。再次谢谢!

[ Last edited by lqs623 on 2010-4-9 at 17:47 ]

2010-4-9 17:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lqs623
贫困用户





积分 -3
发帖 30
注册 2007-8-13
状态 离线
『第 8 楼』:  

再请问:如果要以`;开头的行既“`第一`;`第二`;`第三`”上面的3个P脚本怎样改

2010-4-9 20:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 9 楼』:  

没明白你的意思
for /f在处理文件时,默认会忽略不处理以英文分号;开头的行,这样会导致输出时丢失这些行,解决的方法就是使用eol=
批处理一般只对英文符号敏感,所以你要明确是否是英文符号.
最好贴出部分文件内容



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-4-9 21:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lqs623
贫困用户





积分 -3
发帖 30
注册 2007-8-13
状态 离线
『第 10 楼』:  

文件如下:(目的与上面的3个P脚本一样)


`第一`

xxxxxxxxxxx

yyyyyyyyyyyyyyy
|有很多个文件都有“ 第一 第二 第三 ”的这种格式,只提取从“第二:”开始到“第三:”以前的内容,      
|(大批量文件提取)各自的文件名不改名。或各自的文件名包含各自的原文名也可。                        
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


`第二`
(================================================================================================
(或者叫批量删除具有相同文本格式文件中的一部分,只保留其中的一段,文件较大需提取的内容较少度)}
(是大批量文件处理。在各自原文上删除,即各自的文件名不改名。或各自的文件名包含各自的原文名也可。  

((大批量文件提取)各自的文件名不改名。或各自的文件名包含各自的原文名也可。               
((大批量文件提取)各自的文件名不改名。或各自的文件名包含各自的原文名也可。              
└8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
xxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyyy


`第三`
┌─────────────────────────────────────────────────┐
|也就是说,很多个文件都有“ 第一: 第二: 第三:”的这种格式,在各自的文件上保存要的内容,删除不要 |
|的内容,各自的文件名不变。或各自的文件名包含各自的原文名也可。(大批量处理)                      |
└─────────────────────────────────────────────────┘

2010-4-9 21:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 11 楼』:  

把三个批处理中的
if "!b:~0,4!"=="`第二`" set n=1改成if "!b:~0,4!"=="`第二`" set n=1
然后
if "!b:~0,4!"=="`第三`" set n=0改成if "!b:~0,4!"=="`第三`" set n=0
其他不变

[ Last edited by Hanyeguxing on 2010-4-9 at 22:23 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-4-9 22:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lqs623
贫困用户





积分 -3
发帖 30
注册 2007-8-13
状态 离线
『第 12 楼』:  

非常感谢,祝你好运。

2010-4-9 23:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: