中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [资料]如何提取不同行上的内容
« [1] [2] »
作者:
标题: [资料]如何提取不同行上的内容 上一主题 | 下一主题
happy3
初级用户





积分 45
发帖 23
注册 2007-1-24
状态 离线
『第 16 楼』:  

太深奥了, 看不懂啊!

2007-1-24 06:35
查看资料  发送邮件  发短消息 网志   编辑帖子
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 17 楼』:  

我再来灌一水,我在14楼曾经贴过译文,但是之后的几楼再次提出看不懂,考虑到我拙劣的英文水平可能造成误解,就删除了,今天再次张贴,请高手指正。



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-1-24 06:46
查看资料  发送邮件  发短消息 网志   编辑帖子
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 18 楼』:  

难道懂E文的朋友都没看到?
看来只好用我拙劣的水平试试看,希望能抛砖引玉。
请大家批评指正但不要笑话,我脸皮很薄的。^_^
这一页告诉大家如何从一个文本文件读取某一行. 这里有很多方法可以使用 for/f 读取 input.txt 的内容,例如:

for /f "delims=" %%a in (input.txt) do ...

for /f "delims=" %%a in ('type input.txt') do ...

for /f "delims=" %%a in ('more ^< input.txt') do ...

不过,只有最后一种方法(使用 more 命令) 可以在不同的操作系统中如:Windows NT, 2000, XP and 2003 取得一致的结果。第一种方法不能识别UNICODE编码文件,并且, 如果输入文件名包含空格,usebackq 参数必须被使用,第二个方法, 使用 type 命令, 在 windows2000, XP 和 2003 中如果文件不是从字节序标记(BOM)开始 ,同样不识别unicode 文件。

在所有例子中,假设numbers.txt的内容为:

one
two
three
four
five
six
seven
eight
nine
ten

显示第一行

这个例子输出 one。

@echo off & setlocal ENABLEEXTENSIONS
set "first="
for /f "delims=" %%a in ('more ^< numbers.txt') do (
  if not defined first set first=%%a
)
echo/%first%

显示前几行

这个例子输出 one, two 和 three。

@echo off & setlocal ENABLEEXTENSIONS
set "lines=3"
set i=-1
set "ok="
for /f "delims=" %%a in ('more ^< numbers.txt') do (
  set/a i+=1 & for /f %%z in ('echo/%%i%%') do (
    if "%%z"=="%lines%" set ok=1
  )
  if not defined ok echo/%%a
)

显示最后一行

这个例子输出 ten。

@echo off & setlocal ENABLEEXTENSIONS
for /f "delims=" %%a in ('more ^< numbers.txt') do set "last=%%a"
echo/%last%

显示最后几行

这个例子输出 nine 和 ten。

@echo off & setlocal ENABLEEXTENSIONS
set "lines=2"
for /f %%a in ('find/c /v "" ^< numbers.txt') do set/a skip=%%a-lines
for /f "delims=" %%a in ('more/e +%skip% ^< numbers.txt') do (
  echo/%%a
)

显示第 n 行

这个例子输出three,注意这里使用more的 /e 参数 来跳过指定的行数,配合for/f 使用,当数值小于1时会失败。


@echo off & setlocal ENABLEEXTENSIONS
set LineNo=3
set "line="
set/a LineNo-=1
for /f "delims=" %%a in ('more/e +%LineNo% ^< numbers.txt') do (
  if not defined line set "line=%%a"
)
echo/%line%

显示第 n 行加上 X 行

这个例子输出five和six。

@echo off & setlocal ENABLEEXTENSIONS
set start=5
set "lines=2"
set/a i=-1,start-=1
set "ok="
for /f "delims=" %%a in ('more/e +%start% ^< numbers.txt') do (
  set/a i+=1 & for /f %%z in ('echo/%%i%%') do (
    if "%%z"=="%lines%" set ok=1
  )
  if not defined ok echo/%%a
)


   此帖被 +5 点积分     点击查看详情   
评分人:【 htysm 分数: +1  时间:2007-1-24 07:53
评分人:【 namejm 分数: +4  时间:2007-2-6 01:30




三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-1-24 06:46
查看资料  发送邮件  发短消息 网志   编辑帖子
enliang
初级用户





积分 62
发帖 24
注册 2007-3-17
状态 离线
『第 19 楼』:  

遇到类似这样的行就没效了??

<td width=45 align=center rowspan=2>3</td>
<td width=83 align=center rowspan=2>02.I</td> <!-- @T -->

2007-3-21 23:11
查看资料  发短消息 网志   编辑帖子
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 20 楼』:  

这下可以用bat搞rss了。

2007-7-29 09:20
查看资料  发短消息 网志   编辑帖子
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: