![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-06 13:22 |
共 48,039 主题排行 / 350,124 发帖 / 今日 0 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]如何提取特定字符后的固定长度字符 |
| 可打印版本 1,960 / 18 |
| 第1楼 gskuser | 发表于 2007-11-13 17:42 |
| 初级用户 发帖 12 积分 34 | |
|
[求助]如何提取特定字符后的固定长度字符 文本文件1.txt如下内容如下,各编号之间是用空格分开:
SH:212655 213425 @213455 @213459 213521 ........ BJ:101228 @101325 101329 @101352 @101365 ........ GZ:@200231 200255 @200268 @200286 200301 ........ XA: ........ HM: ......... : .......... : .......... : .......... 要的就是将含有@的6位固定长度编号存入变量中进行处理,如上面的@213455,@213459,@200286等等,而含有@的编号位置没有规律的, 想用For的批处理,如for /f "tokens=2 delims=@"。。。但实现不了,在论坛找了一天也找不到解决办法, 因为代码上头要审查,不能用SED或其它等第三方工具,只能用XP下DOS自带的命令啊,各位先进有没有办法啊? |
|
| 第2楼 knoppix7 | 发表于 2007-11-13 18:09 |
| 银牌会员 发帖 634 积分 1,287 来自 cmd.exe | |
|
用FOR按空格分割.
对分割出的每一个元素的第一个字符进行判断. |
|
| 第3楼 genteman | 发表于 2007-11-13 18:52 |
| 初级用户 发帖 43 积分 90 | |
|
楼上说的是对的,补充一点
delims=:@ |
|
| 第4楼 gskuser | 发表于 2007-11-14 11:51 |
| 初级用户 发帖 12 积分 34 | |
|
试过不行啊,不能遍厉整个文本文件,只取得一行的第一个含有@的编号,后面的就找不到,能给个详细的For语句实现吗
|
|
| 第5楼 lxmxn | 发表于 2007-11-14 13:04 |
| 版主 发帖 4,938 积分 11,386 | |
|
try this code:
|
|
| 第6楼 26933062 | 发表于 2007-11-14 15:38 |
| 银牌会员 发帖 879 积分 2,268 | |
|
::
|
|
| 第7楼 26933062 | 发表于 2007-11-14 15:40 |
| 银牌会员 发帖 879 积分 2,268 | |
|
没注意 lxmxn 版主已经发了,比我的简洁多了。
|
|
| 第8楼 gskuser | 发表于 2007-11-16 14:52 |
| 初级用户 发帖 12 积分 34 | |
|
版主的For代码测试了二天都验正结果正确,版主真是牛人啊 太感谢了
|
|
| 第9楼 zqdarkday | 发表于 2007-11-17 13:01 |
| 中级用户 发帖 79 积分 210 来自 湖北 | |
|
to lxmxn 斑竹
有个问题想问下,你所写的这个代码我有个地方想不通 就是for for %%b in (%%a) do 的时候for不是提取的是一整行吗 最后为什么能把一行中的几段分别提出来呢?是if语句起的作用吗?到底是什么原因 请告诉小弟一下! 谢谢了 |
|
| 第10楼 lxmxn | 发表于 2007-11-17 13:07 |
| 版主 发帖 4,938 积分 11,386 | |
|
RE zqdarkday:
for %%b in (%%a) do 关键是注意%%a的内容是什么格式,第一次循环时,%%a的内容就是: 212655 213425 @213455 @213459 213521 这里得到的是以空格分隔的单独的元素项,那么for不加参数时刚好可以循环迭代in后面括号中的每个元素了,再加上判断,就可以得到最终的结果了。 命令行下面试试 for %a in (c d e f g) do @echo \ %a \ ,看得到什么结果。 |
|
| 第11楼 ansipeter | 发表于 2007-11-17 14:03 |
| 中级用户 发帖 130 积分 269 | |
|
玩儿......................................
[ Last edited by ansipeter on 2007-11-17 at 02:05 PM ] |
|
| 第12楼 zqdarkday | 发表于 2007-11-17 15:10 |
| 中级用户 发帖 79 积分 210 来自 湖北 | |
|
re lxmxn 斑竹
饿,原来最基本的都忘了,谢谢了 不过我还是有个问题,还是关于for机制的 例如把1.txt的空格都改为逗号 SH:212655,213425,@213455,@213459,213521 ........ BJ:101228,@101325,101329,@101352,@101365 ........ GZ:@200231,200255,@200268,@200286,200301 ........ XA: ........ HM: ......... 这样 我写了一个类似的 @echo off & SetLocal EnableDelayedExpansion for /f "delims=: tokens=2" %%a in (1.txt) do ( for /f "delims=," %%b in ('echo %%a') do ( echo %%b set string=%%b if "!string:~0,1!"=="@" ( echo\!string! ) ) ) pause 其中%%b只能显示第一个 这样是怎样的原理啊,谢谢哦 |
|
| 第13楼 lxmxn | 发表于 2007-11-17 17:38 |
| 版主 发帖 4,938 积分 11,386 | |
|
for /f 的时候默认是取第一个元素的,所以只能显示一个。。
|
|
| 第14楼 lxmxn | 发表于 2007-11-17 20:56 |
| 版主 发帖 4,938 积分 11,386 | |
|
TO zqdarkday:
你修改了这个格式其实用我5楼的代码同样适用。。。 |
|
| 第15楼 zqdarkday | 发表于 2007-11-17 21:18 |
| 中级用户 发帖 79 积分 210 来自 湖北 | |
|
re zqdarkday
能不能把具体代码发上来让我看下吗? 谢谢哦 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |