|
WANKOILZ
初级用户
积分 198
发帖 89
注册 2007-9-6 来自 重庆
状态 离线
|
『第
16 楼』:
不会的,zw兄看这个是不是快点:
@echo off
findstr "^abcd" 1.txt
pause [ Last edited by WANKOILZ on 2008-5-29 at 09:17 PM ]
|
|
2008-5-29 21:13 |
|
|
WANKOILZ
初级用户
积分 198
发帖 89
注册 2007-9-6 来自 重庆
状态 离线
|
『第
17 楼』:
网速慢,发重复了,删除此贴。
[ Last edited by WANKOILZ on 2008-5-29 at 09:16 PM ]
|
|
2008-5-29 21:14 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
18 楼』:
Quote: | 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 |
|
2008-5-29 21:21 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
19 楼』:
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
|
致精致简! |
|
2008-5-29 21:23 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
20 楼』:
Quote: | Originally posted by 26933062 at 2008-5-29 21:23:
findstr的效率并不是zw兄所想的那么不堪。(关键看怎么用)
findstr的功能却可能超出你的想像。
按3楼 WANKOILZ 兄的思路也写了个,同时也给3楼代码提 ... |
|
我并不是说findstr一无是处,只是在说明在处理文本字符上不如if效率高。
|
批处理之家新域名:www.bathome.net |
|
2008-5-29 21:26 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
21 楼』:
Quote: | Originally posted by zw19750516 at 2008-5-29 20:52:
楼上的测试代码有误,我认为要比较就要进行逐行判断,请测试以下代码(找出1.txt中所有以abcd开头的行并赋值为A):
[code]
@echo off
if exist 1.txt del /q ... |
|
每个命令都各有巧妙。
严格来说findstr和if是无法进行比较的,对文本处理用if就还要同时配合for、set等其它命令。
我们应该根据需要各取所长。而不以己之长比其之短。
如:zw兄所说,我拟一题,用findstr和for来比较速度如何?
a.txt 内容有一万行,其中有10行是以abcd开头的,
要求:显示a.txt中 abcd 开头的行。
|
致精致简! |
|
2008-5-29 21:32 |
|
|
WANKOILZ
初级用户
积分 198
发帖 89
注册 2007-9-6 来自 重庆
状态 离线
|
『第
22 楼』:
26933062的代码确实很精简,令人佩服。
妙:把文本名字作为变量,在findstr /v "[<>]" *.txt的时候就能同时获得文本的标题和不包含<>的内容。 findstr + 通配符直接就获得所有文本,少用一层for 。
[ Last edited by WANKOILZ on 2008-5-29 at 09:50 PM ]
|
|
2008-5-29 21:45 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
23 楼』:
Quote: | Originally posted by WANKOILZ at 2008-5-29 21:45:
26933062的代码确实很精简,令人佩服。
把文本名字作为变量,在findstr /v "[<>]" *.txt的时候就能同时获得文本的标题和不包含<>的内容。 ... |
|
哦?
有必要么?
或者说有何区别?给个实例好么、?
|
致精致简! |
|
2008-5-29 21:47 |
|
|
WANKOILZ
初级用户
积分 198
发帖 89
注册 2007-9-6 来自 重庆
状态 离线
|
『第
24 楼』:
Quote: | 哦?
有必要么?
或者说有何区别?给个实例好么、? |
|
误会了,我只是分析了以下你代码的妙处,勿怪。
|
|
2008-5-29 21:50 |
|
|
loveid
初级用户
积分 38
发帖 15
注册 2008-4-21
状态 离线
|
『第
25 楼』:
to10f 不好意思,才来回复
Quote: | 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 测试也可.不知这样改,是不是对?谢谢!
|
|
2008-5-31 14:31 |
|
|
loveid
初级用户
积分 38
发帖 15
注册 2008-4-21
状态 离线
|
『第
26 楼』:
10f 以下的很多同仁的贴,我只能带回去慢慢分析了
我很基础的说,基础级的.呵呵!
|
|
2008-5-31 14:36 |
|