中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-15 01:40
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]怎样提取文本中间的哪一行?
楼 主 [求助]怎样提取文本中间的哪一行? 发表于 2008-04-19 19:44 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
a.txt:

1jd
2sdfls
3sd
4kop
5df
6sd

我只想提取出3sd
该怎么做?
谢谢~
2 下次请把要求写清楚了: 发表于 2008-04-19 20:07 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
首先建议搜索。
1按行搜索(第三行)
@echo off
for /f "delims=: tokens=1*" %%i in ('findstr /n .* a.txt') do if %%i equ 3 set str=%%j
echo %str%
pause>nul

2按字符搜索(字符为3)
@echo off
for /f "delims=" %%i in ('findstr "3" a.txt') do set str=%%i
echo %str%
pause>nul
批处理之家新域名:www.bathome.net
3 回复2楼 发表于 2008-04-19 20:11 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
那2个方法我也会,只是a.txt当中的内容是未知的,也怪我没说清楚,我想提取出a.txt中的第三行,第五行,第七行。。
4 这也容易: 发表于 2008-04-19 20:32 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
set /a n+=1
for %%a in (3,5,7) do if !n! equ %%a set str=%%i&echo !str!
)
pause>nul


[ Last edited by zw19750516 on 2008-4-19 at 08:42 PM ]
批处理之家新域名:www.bathome.net
5 发表于 2008-04-19 20:41 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
谢谢~~~ 一指点就明白了~~ 第一段代码,稍作修改下也可以~
@echo off&setlocal enabledelayedexpansion
for /f "delims=:" %%a in ('findstr /n .* a.txt') do set line=%%a
for /f "delims=" %%i in (a.txt) do (
set /a n+=1
for /l %%a in (3,2,%line%) do if !n! equ %%a set str=%%i&echo !str!
)
pause>nul

这样的话 不管有多少行,都会提取从3开始的奇数行了~~
6 发表于 2008-04-19 21:54 ·  中国 香港 腾讯云
银牌会员
★★★
积分 1,436
发帖 739
注册 2007-10-11 17:44
UID 99469
性别 男
状态 离线
sed -n "1,2d;$!N;P" a.txt
7 发表于 2008-04-20 00:13 ·  中国 湖北 武汉 电信
中级用户
★★
积分 471
发帖 207
注册 2007-05-03 14:53
UID 87369
性别 男
状态 离线
GNU sed
sed -n "3p;3~2p" a.txt
8 发表于 2008-04-20 00:21 ·  中国 湖北 武汉 电信
中级用户
★★
积分 471
发帖 207
注册 2007-05-03 14:53
UID 87369
性别 男
状态 离线
@echo off & SetLocal EnableDelayedExpansion

for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.txt') do (
set /a a=%%a%%2
if %%a geq 3 if !a! equ 1 echo.%%b
)
9 发表于 2008-04-20 03:06 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线
从第3行开始取奇数行。
:

@echo off&setlocal enabledelayedexpansion
set n=3
for /f "delims=" %%a in ('findstr /n .* a.txt') do (
set str=%%a&set /a m+=1
set str=!str:*:=!
if !m! equ !n! (set /a n+=2&echo.!str!)
)
pause
致精致简!
10 发表于 2008-04-20 03:38 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
UID 103127
性别 男
状态 离线
我来个一句话的:
@for /f "skip=2 delims=" %%a in (test.txt) do @if not defined plp (echo.%%a &set "plp=626") else set "plp="
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
26933062 +5 2008-04-20 04:12
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
11 发表于 2008-04-20 04:12 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线
Originally posted by plp626 at 2008-4-20 03:38:
我来个一句话的:
@for /f "skip=2 delims=" %%a in (test.txt) do @if not defined plp (echo.%%a &set "plp=626") else set "plp="


巧妙!
致精致简!
论坛跳转: