中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-15 00:12
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 提取<title>与</title>之间的内容为新文件第一行,
16 发表于 2008-05-29 21:13 ·  中国 重庆 电信
初级用户
★★
积分 198
发帖 89
注册 2007-09-06 23:22
UID 96746
性别 男
来自 重庆
状态 离线
不会的,zw兄看这个是不是快点:

@echo off
findstr "^abcd" 1.txt
pause


[ Last edited by WANKOILZ on 2008-5-29 at 09:17 PM ]
17 发表于 2008-05-29 21:14 ·  中国 重庆 电信
初级用户
★★
积分 198
发帖 89
注册 2007-09-06 23:22
UID 96746
性别 男
来自 重庆
状态 离线
网速慢,发重复了,删除此贴。

[ Last edited by WANKOILZ on 2008-5-29 at 09:16 PM ]
18 发表于 2008-05-29 21:21 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
Originally posted by WANKOILZ at 2008-5-29 21:13:
不会的,zw兄看这个是不是快点:

@echo off
findstr "^abcd" 1.txt
pause


[ Last edited by WANKOILZ on 2008-5-29 at 09:17 PM ]

请自己测试运行结果和时间吧。
批处理之家新域名:www.bathome.net
19 发表于 2008-05-29 21:23 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线
findstr的效率并不是zw兄所想的那么不堪。(关键看怎么用)
findstr的功能却可能超出你的想像。
按3楼 WANKOILZ 兄的思路也写了个,同时也给3楼代码提了提速。。。
呵呵,感觉应该快些,未测试。。。。
:

@echo off&md abcd
set "f=\<<title>.*</title>\>"
for /f "tokens=1,4 delims=:<>" %%a in ('findstr "%f%" *.txt') do set ".%%~na=%%b"
setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%a in ('findstr /v "" *.txt') do (
if not defined %%~na set %%~na=aaa&>>"abcd\%%a" echo !.%%~na!
>>"abcd\%%a" echo.%%b
)
start abcd
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
WANKOILZ +2 2008-05-29 22:00
致精致简!
20 发表于 2008-05-29 21:26 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
Originally posted by 26933062 at 2008-5-29 21:23:
findstr的效率并不是zw兄所想的那么不堪。(关键看怎么用)
findstr的功能却可能超出你的想像。
按3楼 WANKOILZ 兄的思路也写了个,同时也给3楼代码提 ...

我并不是说findstr一无是处,只是在说明在处理文本字符上不如if效率高。
批处理之家新域名:www.bathome.net
21 发表于 2008-05-29 21:32 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线
Originally posted by zw19750516 at 2008-5-29 20:52:

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

@echo off
if exist 1.txt del /q ...

每个命令都各有巧妙。
严格来说findstr和if是无法进行比较的,对文本处理用if就还要同时配合for、set等其它命令。
我们应该根据需要各取所长。而不以己之长比其之短。
如:zw兄所说,我拟一题,用findstr和for来比较速度如何?
a.txt 内容有一万行,其中有10行是以abcd开头的,
要求:显示a.txt中 abcd 开头的行。
致精致简!
22 发表于 2008-05-29 21:45 ·  中国 重庆 电信
初级用户
★★
积分 198
发帖 89
注册 2007-09-06 23:22
UID 96746
性别 男
来自 重庆
状态 离线
26933062的代码确实很精简,令人佩服。
妙:把文本名字作为变量,在findstr /v "" *.txt的时候就能同时获得文本的标题和不包含<>的内容。 findstr + 通配符直接就获得所有文本,少用一层for 。

[ Last edited by WANKOILZ on 2008-5-29 at 09:50 PM ]
23 发表于 2008-05-29 21:47 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线
Originally posted by WANKOILZ at 2008-5-29 21:45:
26933062的代码确实很精简,令人佩服。
把文本名字作为变量,在findstr /v "" *.txt的时候就能同时获得文本的标题和不包含<>的内容。 ...

哦?
有必要么?
或者说有何区别?给个实例好么、?
致精致简!
24 发表于 2008-05-29 21:50 ·  中国 重庆 电信
初级用户
★★
积分 198
发帖 89
注册 2007-09-06 23:22
UID 96746
性别 男
来自 重庆
状态 离线
哦?
有必要么?
或者说有何区别?给个实例好么、?

误会了,我只是分析了以下你代码的妙处,勿怪。
25 to10f 不好意思,才来回复 发表于 2008-05-31 14:31 ·  中国 山东 枣庄 联通
初级用户
积分 38
发帖 15
注册 2008-04-21 13:22
UID 116493
性别 男
状态 离线
Originally posted by zw19750516 at 2008-5-29 08:00 PM:
不知楼主测试了我发的两段代码没有,是不是不行,还是怎么的,怎么就没回馈的了(我自己建了10个文件是测试全部成功的)

运行后全部成功!!谢谢,我不太看懂的地方做了些修改,我感觉更好懂一些,先未征的你的同意,见凉,改了的地方为:if !n! equ 1 if not "!str:~,5!"=="<pre>" echo !str!>>%%a,改为:if !n! equ 1 if not "!str:~-4!"=="pre>" echo !str!>>%%a全部如下

@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
if "!str:~6,7!"=="<title>" echo !str:~13,-15!>%%a
if "!str:~-4!"=="pre>" set /a n+=1
if !n! equ 1 if not "!str:~-4!"=="pre>" echo !str!>>%%a
)
set n=0
)
echo 全部搞定!
pause>nul

测试也可.不知这样改,是不是对?谢谢!
26 10f 以下的很多同仁的贴,我只能带回去慢慢分析了 发表于 2008-05-31 14:36 ·  中国 山东 枣庄 联通
初级用户
积分 38
发帖 15
注册 2008-04-21 13:22
UID 116493
性别 男
状态 离线
我很基础的说,基础级的.呵呵!
论坛跳转: