中国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 楼』:  

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




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 ]




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脚本,你根据情况自己选呗




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= 批处理一般只对英文符号敏感,所以你要明确是否是英文符号. 最好贴出部分文件内容




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 ]




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





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

非常感谢,祝你好运。


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

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


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



论坛跳转: