![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-08 10:42 |
共 47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 请问如果在文本中抽取指定字符赋值于变量中 |
| 可打印版本 6,032 / 32 |
| 第1楼 mp3down | 发表于 2006-12-12 06:06 |
| 初级用户 发帖 14 积分 43 | |
|
请问如果在文本中抽取指定字符赋值于变量中 我想,在一个文本文件中,抽取第17行第8-20这一串字符,并将它们赋值于一个变量给接下来的命令用,怎么办?
请各位大侠不要怪我整天问这些太菜的问题,我也觉得有点不好意思。想到不耻下问,这坛子的确令我学到东西,所以就壮胆了。 [ Last edited by namejm on 2006-12-13 at 01:54 PM ] |
|
| 第2楼 a9319751 | 发表于 2006-12-12 06:12 |
| 中级用户 发帖 170 积分 439 | |
| 第3楼 youxi01 | 发表于 2006-12-12 06:19 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
或者: [ Last edited by youxi01 on 2006-12-12 at 06:22 AM ] |
|
| 第4楼 NaturalJ0 | 发表于 2006-12-12 06:21 |
| 银牌会员 发帖 533 积分 1,181 | |
|
setlocal enabledelayedexpansion
for /f "skip=16 delims=" %%i in (filename.txt) do ( set var=%%i set var=!var:~7,13! goto :outfor) :outfor 红色部分你可以自己随便替换。 |
|
| 第5楼 NaturalJ0 | 发表于 2006-12-12 06:22 |
| 银牌会员 发帖 533 积分 1,181 | |
|
哇,我手脚太慢了。 = =b
|
|
| 第6楼 ccwan | 发表于 2006-12-12 06:24 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
我的手够快吧?
鼓励一下热心的朋友们! |
|
| 第7楼 ccwan | 发表于 2006-12-12 06:53 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
还有,楼主注意你的标题!
|
|
| 第8楼 mp3down | 发表于 2006-12-12 07:08 |
| 初级用户 发帖 14 积分 43 | |
|
谢谢热心的朋友们,我以后会注意标题了。
|
|
| 第9楼 namejm | 发表于 2006-12-12 09:07 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
Re all:
用批处理来提取文本内容,要随时注意兼容特殊字符,比如空格,比如连接字符&、||等,因此,youxi01 兄在3F的代码动用了 delims= 和 set "str=%%i" ,这是非常有必要的。 不过,批处理还是不能处理所有的特殊情况,比如:如果有以半角分号开头的行,一般的 for 语句会忽略这些行,用 set /a num+=1 来统计行数会出错,换成 for + findstr /n 就可以避免;但是,for + findstr /n 也不能包打天下,至少,如果某些行以半角冒号打头,则 for /f "tokens=1* delims=:" %%i in ('findstr /n .* test.txt') do echo "%%j" 会把所有行首冒号忽略掉。所以,在处理文本的时候,只能指望这些特殊的情形不一起出现了。不知各位有没有什么好办法来解决。 |
|
| 第10楼 3742668 | 发表于 2006-12-12 10:25 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
暂时的变更方案,试试有无bug。 |
|
| 第11楼 namejm | 发表于 2006-12-12 11:04 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
3742668 兄10F的代码仍然不能正确处理行首为分号的情况,也不能正确处理行内带感叹号的情况。
代码1能正确处理行首为分号或冒号,行上带&、||等特殊字符的文本,但是不能正确提取带感叹号的内容,代码2能解决感叹号的问题,但是需要用引号括起来,基本上解决了我在9F提出的问题,请各位测试: 代码1: 代码2: test.txt的内容: [ Last edited by namejm on 2006-12-11 at 10:13 PM ] |
|
| 第12楼 3742668 | 发表于 2006-12-12 11:41 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
try try this:
|
|
| 第13楼 namejm | 发表于 2006-12-12 12:18 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
eol= 用得巧,setlocal 用得妙,高,实在是高,嘿嘿。
|
|
| 第14楼 lxmxn | 发表于 2006-12-12 13:47 |
| 版主 发帖 4,938 积分 11,386 | |
|
真是强啊。学习了。。 |
|
| 第15楼 lxmxn | 发表于 2006-12-12 13:50 |
| 版主 发帖 4,938 积分 11,386 | |
|
还有一个问题,就是如果a.txt里面有空行(直接回车)的话,那么就会出错,批处理提示:
不知道这个问题怎么解决? |
|
| 1 2 3 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |