![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-02 01:25 |
共 48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,250 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如何提取一个文本的某一行? |
| 可打印版本 1,332 / 12 |
| 第1楼 linson | 发表于 2005-06-16 00:00 |
| 中级用户 发帖 31 积分 283 | |
|
如何提取一个文本的某一行? 在windows xp的环境下,不用第三软件.用dos命令能否提取一个文本的某一行?想请教!先谢了!
|
|
| 第2楼 Climbing | 发表于 2005-06-16 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
你用记事本打开复制那一行不就行了。要是用DOS命令的话,不用第三方软件恐怕很难。
|
|
| 第3楼 smileseeker | 发表于 2005-06-16 00:00 |
| 中级用户 发帖 83 积分 316 | |
|
get.bat内容:
if "%2"=="" %comspec% /v n /c %0 %1 cmdshell && goto :EOFset a=0 for /f %%i in (source.txt) do set /a a=a+1 && if "!a!"=="%1" echo %%i >>dest.txt :EOF get.bat n 表示提取第n行 如果source.txt有空格的话 for /f %%i in (source.txt) do set /a a=a+1 && if "!a!"=="%1" echo %%i >>dest.txt 要相应修改一下 以上在win2k下可以通过 |
|
| 第4楼 linson | 发表于 2005-06-17 00:00 |
| 中级用户 发帖 31 积分 283 | |
|
谢谢3楼的。
|
|
| 第5楼 Climbing | 发表于 2005-06-17 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
以下是引用smileseeker在2005-6-16 19:41:53的发言: 呵呵,好办法,忘了还有这一招儿。 |
|
| 第6楼 linson | 发表于 2005-06-17 00:00 |
| 中级用户 发帖 31 积分 283 | |
|
我想再请教一下,3楼的方法不错,但就是必须要执行循环多次(如果文本有太多行,就不太好了)如果我只想提取第一行,有没有更简单或简便的方法。
|
|
| 第7楼 Climbing | 发表于 2005-06-17 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
没有循环多次啊,只有一次循环。不过for好象是不能中途退出的。
|
|
| 第8楼 linson | 发表于 2005-06-17 00:00 |
| 中级用户 发帖 31 积分 283 | |
|
不好意思,是我说得不清楚,我的意思是要检测每行有点麻烦。哈哈,我想到了。可以在for /f %%i in (source.txt) do set /a a=a+1 && if "!a!"=="%1" echo %%i >>dest.txt 后面加&&goto :EOFfor /f %%i in (source.txt) do set /a a=a+1 && if "!a!"=="%1" echo %%i >>dest.txt &&goto :EOF这样当"!a!"=="%1" 是也执行goto :EOF,也就退出循环了。
|
|
| 第9楼 Climbing | 发表于 2005-06-17 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
好主意,我也想到了这个办法,只是不知道成不成,应该没有问题的。
|
|
| 第10楼 chineseblog | 发表于 2006-09-05 22:14 |
| 新手上路 发帖 4 积分 8 | |
|
谢谢,正好用的到呢
|
|
| 第11楼 9527 | 发表于 2006-09-05 23:30 |
| 银牌会员 发帖 438 积分 1,185 来自 北京 | |
|
既然提到了,我也顺便发一下
@echo off for /f %%a in ('find /v /c "" ^<%1') do if %2 GTR %%a (echo Oh,Sorry,too large!!!&&goto :eof) for /f "tokens=1* delims=:" %%x in ('findstr /n .* %1^|findstr /b "^%2.*$"') do if "%%y"=="" (echo The Line is Empty!) else (echo %%y) 不知道效果如何,我测试的是很普通的文件,没有做特殊字符的过滤 用法 test.bat 文件名字 行数 |
|
| 第12楼 NaturalJ0 | 发表于 2006-09-06 00:46 |
| 银牌会员 发帖 533 积分 1,181 | |
|
set /a num=%1-1
for /f "skip=num" %%i in (file.txt) do ( set youwant=%%i goto OUTFOR) :OUTFOR |
|
| 第13楼 vkill | 发表于 2006-09-06 02:37 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
Originally posted by NaturalJ0 at 2006-9-6 00:46: 这个应该更好,不需要循环 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |