中国DOS联盟论坛

中国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里面有空行(直接回车)的话,那么就会出错,批处理提示:

已经达到最大的 setlocal 递归层。

  不知道这个问题怎么解决?
1 2 3  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023