中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-09 00:18
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » 提取<title>与</title>之间的内容为新文件第一行,
可打印版本  1,963 / 25
第1楼 loveid 发表于 2008-05-27 13:19
初级用户 发帖 15 积分 38
提取<title>与</title>之间的内容为新文件第一行,
1,每个文件都要进行类似处理:
1,提取<title>与</title>之间的内容为新文件第一行,
2,提取<pre>与</pre>之间的内容并删除其中的空行赋给新文件第一行之后的行
3,把新文件改名为旧文件名。
2.我的系统是NT,未联网,这是在网吧求助,谢谢!
有几篇文章,是三毛的,我想把文章打到纸上看,文件名是这样的一些 01.TXT,02.TXT,03.TXT,...,88.TXT
他们是我用批处理处理了01.htm,02.htm,03.htm,...,88.htm(把他们的每个文件的后缀名改成.txt)的结果。每个文件内容都是这样的(复制一下内容到记事本,请调整“格式“为不要在自动换行处打勾):
04.txt内容如下:
我想把正文(即<pre>与</pre>之间的内容)打印出来,并在头上加上<title>与</title>之间的内容。
每个txt文件的格式都与上面的类似,有不同的地方在于<pre>与</pre>之间的内容和<title>与</title>之间的内容等,
我想求个批处理,要求把每个txt文件重新编辑成:
<title>与</title>之间的内容,另起一行
<pre>与</pre>之间的内容,并删除其中的空行
的格式,文件名不变。
变成如下的04.txt文件内容:

简要的说,
1,每个文件都要进行类似处理:
1,提取<title>与</title>之间的内容为新文件第一行,
2,提取<pre>与</pre>之间的内容并删除其中的空行赋给新文件第一行之后的行
3,把新文件改名为旧文件名。

2.请教各位高手.

[ Last edited by loveid on 2008-5-27 at 01:41 PM ]
第2楼 loveid 发表于 2008-05-27 14:53
初级用户 发帖 15 积分 38
明天再来请教
谢谢
第3楼 WANKOILZ 发表于 2008-05-27 15:28
初级用户 发帖 89 积分 198 来自 重庆
我来个比较粗糙的,因为发现除题目外,其余要抛弃的行都应该包含<或>,所以思路就是找题目和不包含<>的行。把以下P和txt文件放在一起然后运行,新文件在newfile里面:
第4楼 terse 发表于 2008-05-27 17:53
银牌会员 发帖 946 积分 2,404
上面的如果可以用 也可以直接改 HTM文件
@echo off
for /f "delims=" %%i in ('dir /b /a-d *.htm') do (
for /f "tokens=3 delims=<>" %%a in ('findstr "\<<title>.*</title>\>" "%%i"') do >"%%~ni.txt" echo %%a
findstr /v "^<" %%~nxi>>%%~ni.txt
)
pause
第5楼 loveid 发表于 2008-05-28 15:26
初级用户 发帖 15 积分 38
感谢感谢,我自己暂时是不懂的代码的.
Originally posted by WANKOILZ at 2008-5-27 03:28 PM:
我来个比较粗糙的,因为发现除题目外,其余要抛弃的行都应该包含<或>,所以思路就是找题目和不包含<>的行。把以下P和txt文件放在一起然 ...

就是 单独对04.txt运行后编辑出来的如下:

没有去掉空行,想去掉空行的说,如不吝赐教,更加感谢
第6楼 bat-zw 发表于 2008-05-28 17:06
金牌会员 发帖 1,276 积分 3,105
请放在当前目录下运行:


[ Last edited by zw19750516 on 2008-5-28 at 05:08 PM ]
第7楼 bat-zw 发表于 2008-05-28 17:15
金牌会员 发帖 1,276 积分 3,105
Originally posted by zw19750516 at 2008-5-28 17:06:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
for /f "delims=" %%i in ('type %%a') do (
set str=%%i
...

上面是不行成任何临时文件的方法,但效率差点,如要效率高点,可修改如下:

注:也请放在当前目录下运行。
第8楼 loveid 发表于 2008-05-29 16:02
初级用户 发帖 15 积分 38
加工 WANKOILZ 兄的代码,部分的满足了我的要求,如下

我把全部要处理的文档传上来了,有兴趣的朋友可以试待处理的文章

要去抄写这个上传地址真麻烦,我对论坛不熟悉的说!

[ Last edited by loveid on 2008-5-29 at 04:13 PM ]
第9楼 WANKOILZ 发表于 2008-05-29 18:37
初级用户 发帖 89 积分 198 来自 重庆
去空行的话,用 findstr . a.txt>b.txt 这种方法比较简洁。


[ Last edited by WANKOILZ on 2008-5-29 at 06:43 PM ]
第10楼 bat-zw 发表于 2008-05-29 20:00
金牌会员 发帖 1,276 积分 3,105
不知楼主测试了我发的两段代码没有,是不是不行,还是怎么的,怎么就没回馈的了(我自己建了10个文件是测试全部成功的)
第11楼 bat-zw 发表于 2008-05-29 20:01
金牌会员 发帖 1,276 积分 3,105
Originally posted by WANKOILZ at 2008-5-29 18:37:
去空行的话,用 findstr . a.txt>b.txt 这种方法比较简洁。
第12楼 WANKOILZ 发表于 2008-05-29 20:20
初级用户 发帖 89 积分 198 来自 重庆
zw兄的代码每行判断,文本数量多的时候恐怕效率比不上findstr吧.
我用以下代码测试10000个txt文件,结果findstr消耗 不到1秒,而if消耗 大于3秒。
测试代码:
第13楼 bat-zw 发表于 2008-05-29 20:52
金牌会员 发帖 1,276 积分 3,105
Originally posted by WANKOILZ at 2008-5-29 20:20:
zw兄的代码每行判断,文本数量多的时候恐怕效率比不上findstr吧.
我用以下代码测试10000个txt文件,结果findstr消耗 不到1秒,而if消耗 大于3秒。
测试 ...

楼上的测试代码有误,我认为要比较就要进行逐行判断,请测试以下代码(找出1.txt中所有以abcd开头的行并赋值为A):

附我的测试结果如下:


[ Last edited by zw19750516 on 2008-5-29 at 09:08 PM ]
第14楼 WANKOILZ 发表于 2008-05-29 21:07
初级用户 发帖 89 积分 198 来自 重庆
管道+findstr 这种方式效率低是肯定的,也是应该尽量避免的。
findstr需单独用,如findstr "" *.txt 这种形式才能体现其效率。
我认为zw兄的例子在findstr的常规使用范围之外。
第15楼 bat-zw 发表于 2008-05-29 21:09
金牌会员 发帖 1,276 积分 3,105
Originally posted by WANKOILZ at 2008-5-29 21:07:
管道+findstr 这种方式效率低是肯定的,也是应该尽量避免的。
findstr需单独用,如findstr "" *.txt 这种形式才能体现其效率。
我认为zw兄的例子在findstr的常规使用范围之外。

那请兄弟用findstr找出上述1.txt中以abcd开头的行吧。
ps:我费这么力气无非是要证明findstr在处理文本字符时效率比不上if,请兄弟不要误会了我的意思。

[ Last edited by zw19750516 on 2008-5-29 at 09:13 PM ]
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023