![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 00:36 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 利用FOR提取FIND要查找字符,然后记数的问题 |
| 可打印版本 1,001 / 12 |
| 第1楼 THENEWLIFE | 发表于 2009-06-02 10:08 |
| 初级用户 发帖 64 积分 78 | |
|
利用FOR提取FIND要查找字符,然后记数的问题 我一个TXT文本有如下内容:
05.05.31: 108896 908045(X) 918178 918089(X) plp 05.06.13: 108933 108768 05.06.29: 108949 108926 05.08.11: 918131(X) 05.10.13: 108722 05.10.17: 108912 05.11.04: 108016 05.11.10: 858001 858002 928050 928068 05.11.25: 828166 05.11.30: 928098 928168 05.12.02: 108590 108668 108527 05.12.27: 928186 我想知道里面有多少个"928"开的的数组,例如"928098" 我的命令是这样的 for /f %%i in ('find " 928*" 1.txt ') do (set t+=1) pause ::: 我直接用 find " 928" 能在 1.txt中找到这样的结果: ---------- 1.TXT 05.11.10: 858001 858002 928050 928068 05.11.30: 928098 928168 05.12.27: 928186 按4楼的讲解,我对find的理解是:find 是一行一行的找过去,只要有他需要找的东西,他就会显示一行的内容。但为什么我用“ 928*”却什么也找不到呢? 还有就是for /f "tokens=*"是取所有符号传递给FOR程序体吗,我直接不把 "tokens=*"打出来 ,他默认也是取所有的吧,像 for /f %%i in for /f "tokens=*" %%i in 2个的意思是一样的吗? tokens=1* 这个是取每行的第一个字符吗,那为什么后面要打*呢 我看FOR 的注释,他是tokens=2,3*这样用, 我对这句话的理解是取每行第一个字符给FOR程序本体,有”*“的话就可以扩展去第二个,和第三个一直到范围边缘。如果1后面没跟”*“的话。就只取一个,不能扩展是吗? [ Last edited by THENEWLIFE on 2009-6-4 at 00:08 ] |
|
| 第2楼 moniuming | 发表于 2009-06-02 11:13 |
| 银牌会员 发帖 574 积分 1,335 来自 广西 | |
| 第3楼 THENEWLIFE | 发表于 2009-06-02 11:19 |
| 初级用户 发帖 64 积分 78 | |
|
你好,谢谢你的回复
为什么我的不行呢,我的想法是这样的,先用FIND 找出要找的数字.然后再计数.不知道我的错在哪呢,我直接用'find " 928*" 1.txt 好象也不能用, 这句是我以前发贴一个大大教我用的.因为我要找928开头的数字,为了避免这样的"918928" 还请前辈门帮忙解释下 |
|
| 第4楼 moniuming | 发表于 2009-06-02 11:29 |
| 银牌会员 发帖 574 积分 1,335 来自 广西 | |
|
find是一行一行的查找,做不到一列一列的查找,所以要用字符截取才能实现.
|
|
| 第5楼 tireless | 发表于 2009-06-02 12:14 |
| 银牌会员 发帖 1,122 积分 2,025 | |
| 第6楼 26933062 | 发表于 2009-06-02 15:30 |
| 银牌会员 发帖 879 积分 2,268 | |
|
. [ Last edited by 26933062 on 2009-6-2 at 16:02 ] |
|
| 第7楼 THENEWLIFE | 发表于 2009-06-02 22:19 |
| 初级用户 发帖 64 积分 78 | |
|
我直接用 find " 928" 能在 1.txt中找到这样的结果:
---------- 1.TXT 05.11.10: 858001 858002 928050 928068 05.11.30: 928098 928168 05.12.27: 928186 按4楼的讲解,我对find的理解是:find 是一行一行的找过去,只要有他需要找的东西,他就会显示一行的内容。但为什么我用“ 928*”却什么也找不到呢? 还有就是for /f "tokens=*"是取所有符号传递给FOR程序体吗,我直接不把 "tokens=*"打出来 ,他默认也是取所有的吧,像 for /f %%i in for /f "tokens=*" %%i in 2个的意思是一样的吗? tokens=1* 这个是取每行的第一个字符吗,那为什么后面要打*呢 我看FOR 的注释,他是tokens=2,3*这样用, 我对这句话的理解是取每行第一个字符给FOR程序本体,有”*“的话就可以扩展去第二个,和第三个一直到范围边缘。如果1后面没跟”*“的话。就只取一个,不能扩展是吗? |
|
| 第8楼 THENEWLIFE | 发表于 2009-06-03 11:53 |
| 初级用户 发帖 64 积分 78 | |
|
还请前辈门帮忙解释下疑问
—————————————————————————————————————— 请不要发同意的帖子 因为你发了个同样的帖子,所以我已经将下面你发的同样的帖子删除了 操作:不得不爱 —————————————————————————————————————— [ Last edited by 不得不爱 on 2009-6-4 at 23:28 ] |
|
| 第9楼 不得不爱 | 发表于 2009-06-04 23:23 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
用下面的命令可以办到
1楼的for /f %%i in ('find " 928*" 1.txt ') do (set t+=1)会让find搜索 928*并且在搜索到后显示文件名,所以会得不到正确的答案,因为文档里根本没有 包含 928*字符串! 楼上几位是不是把问题搞复杂了,利用find命令就1句就可以了 [ Last edited by 不得不爱 on 2009-6-4 at 23:34 ] |
|
| 第10楼 tireless | 发表于 2009-06-05 00:25 |
| 银牌会员 发帖 1,122 积分 2,025 | |
Originally posted by 不得不爱 at 2009-6-4 11:23 PM: 每行的 928 的数量不定。如果每行最多只有一个 928 就可以这样。 [ Last edited by tireless on 2009-6-5 at 00:56 ] |
|
| 第11楼 不得不爱 | 发表于 2009-06-05 21:18 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
那还是用这个吧!通过2次搜索928来提高效率!
|
|
| 第12楼 THENEWLIFE | 发表于 2009-06-08 23:08 |
| 初级用户 发帖 64 积分 78 | |
|
谢谢,不得不爱版主的帮助
还请帮忙解释下7楼的疑问 |
|
| 第13楼 tireless | 发表于 2009-06-09 03:03 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
find " 928*" 1.txt 找的是引号内的字符本身,* 在 find 命令中不是通配符。
=========================================== tokens=* 是取剩余部分。 例如有字符串: 前面有 3 个空格 "tokens=1,*" → 第一块为“前面有”,第二块为“3 个空格” "tokens=*" → 结果为“前面有 3 个空格” "delims=" → 结果为“ 前面有 3 个空格” |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |