![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-26 01:25 |
共 47,812 主题排行 / 349,910 发帖 / 今日 0 篇 / 48,264 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [挑战2] 变量的检测和计算[难度:★] |
| 可打印版本 4,665 / 38 |
| 第31楼 111ab | 发表于 2007-05-10 13:35 |
| 新手上路 发帖 1 积分 2 | |
Originally posted by bjsh at 2007-5-1 05:16 AM: bjsh兄: 无意间看到了你的帖子,被你的代码折服了。花了一天多时间拜读了一下你的代码,刚弄懂提取数字字段那部分,我是菜鸟,别笑话我,哈。有点问题想请教。 感觉你的 findstr 的正则表达式对字串类似"12345adfadfds45156"(头尾均为数字,但中间为字符)的情况也能匹配。我想改成这样地: findstr "^*$" tmp.txt 你的findstr中有个参数是 /r , 我在命令行查看findstr的帮助的时候没看到有这个参数,就对加 /r 和不加 /r两种情况分别试了一下,没看出什么区别,那个 /r 是做什么用地呢? 注:正则表达式 "^*$" 并不能匹配字串类似"123457684 "的情况,所以:get_number段中代码要做一下小小改动,我的建议如下: 原代码: echo %1 >>tmp.txt & shift 修改后: echo %1>>tmp.txt& shift ::注意该处%1后和.txt后均不能有空格,否则空格会被输入到.txt中,影响正则表达式的匹配。 或改成: echo %1>>tmp.txt shift |
|
| 第32楼 flyinspace | 发表于 2007-05-10 17:24 |
| 银牌会员 发帖 517 积分 1,206 | |
Originally posted by 111ab at 2007-5-10 01:35 PM: 我对正则表达式还是不太明白。。刚刚接触vbs。。 但兄可以仔细看看 findstr /? 里面有说明: /r 表示使用一般表达式。而根据下面对一般表达式的描叙,应该是属于正则表达式范畴。 |
|
| 第33楼 bjsh | 发表于 2007-06-06 10:55 |
| 银牌会员 发帖 621 积分 2,000 | |
|
to 111ab
感谢兄的指点; 兄的建议 很有道理 |
|
| 第34楼 26933062 | 发表于 2007-08-15 19:12 |
| 银牌会员 发帖 879 积分 2,268 | |
|
[ Last edited by 26933062 on 2007-8-15 at 07:51 PM ] |
|
| 第35楼 youxi01 | 发表于 2007-08-15 20:58 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
又回到这个问题了。
刚刚想到一个“补位”的方法来实现加法,从而避开所有的if检查,而且程序主要部分都是在for中运行,避开了goto的使用,从而使效率大大提高(特别是针对特大数字)。所给程序代码支持 200 位以内数字的加法。 [ Last edited by youxi01 on 2007-8-15 at 09:07 PM ] |
|
| 第36楼 knoppix7 | 发表于 2007-08-15 22:31 |
| 银牌会员 发帖 634 积分 1,287 来自 cmd.exe | |
|
高手看看这个行不??
@echo off set "num1=qwer/asdf2/asd34f/1234567890123456/asdf/aaaa" set "num2=aaaaa2/23456789012345678/asdfssasd/asdaa" SETLOCAL ENABLEDELAYEDEXPANSION set tester=500 :main1 FOR /F "tokens=1,2* delims=/" %%i in ("%num1%") do ( set NTC= set RUS= set NTC=%%i set /a RUS=%tester%+!NTC!>>nul>>nul if !ERRORLEVEL!==9168 set shuzi1=!NTC! set num1=%%j/%%k goto main1 ) cls :main2 FOR /F "tokens=1,2* delims=/" %%a in ("%num2%") do ( set NTC= set RUS= set NTC=%%a set /a RUS=%tester%+!NTC!>>nul>>nul if !ERRORLEVEL!==9168 set shuzi2=!NTC! set num2=%%b/%%c goto main2 ) cls echo !shuzi1! echo !shuzi2! pause |
|
| 第37楼 26933062 | 发表于 2007-08-16 20:05 |
| 银牌会员 发帖 879 积分 2,268 | |
| 第38楼 youxi01 | 发表于 2007-08-16 20:31 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
哦,你试下特大数字就知道了
|
|
| 第39楼 knoppix7 | 发表于 2007-08-16 20:37 |
| 银牌会员 发帖 634 积分 1,287 来自 cmd.exe | |
|
LZ给的数字很长。
直接用set运算会报错。ERROELV为9168 那样只要只要检测到ERRORLEVEL==9168不就可以了? |
|
| 上一页 1 2 3 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |