标题: [数值计算] [已解决]批处理如何根据数值是否在指定范围定义不同变量值? [打印本页]
作者: lovealei 时间: 2012-1-1 10:26 标题: [已解决]批处理如何根据数值是否在指定范围定义不同变量值?
本帖最后由 pcl_test 于 2016-7-31 12:46 编辑
我要设置一个变量,
如果 %newscore% 小于1000 设置newlevel='会员用户'
如果 %newscore% 大于1000 并且小于5000 设置newlevel='银卡会员'
如果 %newscore% 大于5000 设置newlevel='金卡会员'
If %newscore% LSS 1000 ( set newlevel=会员用户) else ( set newlevel=银卡会员)
我这样写只能表达其中一个,是不正确的,这个表达式要怎么用批处理来写呢?
作者: yyykkkyyyy 时间: 2012-1-1 10:43
- set newlevel=银卡会员
- if %newscore% lss 1000 set newlevel=会员用户
- if %newscore% geq 5000 set newlevel=金卡会员
复制代码
作者: lovealei 时间: 2012-1-1 10:44
本帖最后由 lovealei 于 2012-1-1 10:47 编辑
- set newscore=11900
- If %newscore% LSS 1000 ( set newlevel=会员用户&set newlevelid=1) else ( If %newscore% LSS
-
- 5000 (set newlevel=银卡会员&set newlevelid=2) else (set newlevel=金卡会员&set newlevelid=3))
- echo %newlevel%
- echo %newlevelid%
- pause
复制代码
作者: lovealei 时间: 2012-1-1 10:45
我想了下用IF嵌套,大家帮我看看上面的代码有没有问题
作者: lovealei 时间: 2012-1-1 10:49
谢谢2楼的,但我只想用一行代码来完成,2楼的思路是我没有想到的,哦,我太笨了
作者: CrLf 时间: 2012-1-1 11:53
本帖最后由 CrLf 于 2012-1-3 01:58 编辑
- set c=1000
- rem 假设 c 为 1000
- set /a "n=1+!!c+!!(c/1000)+!!(c/5000)"
- rem n 至少为 1,当 c 不为 0 时加 1,c 大于1000 时再加 1,大于 5000 时又加 1
- for /f "tokens=%n%" %%a in ("非会员 会员用户 银卡会员 金卡会员") do echo %%a
- rem 显示对应节数的字段
复制代码
作者: cjiabing 时间: 2012-1-2 21:48
学学基础吧1`
作者: 冷玉公子 时间: 2012-1-2 23:30
回复 6# CrLf
老兄真看不懂你的,能解释一下吗。可能我基础也不好 哈哈。
作者: 冷玉公子 时间: 2012-1-2 23:49
本帖最后由 冷玉公子 于 2012-1-3 12:59 编辑
我觉得这样写就可以了吗
- @Echo Off&SetLocal EnableDelayedExpansion
- Set /P Value=请输入一个数值:
- IF %Value% LEQ 1000 Set Newlevel=会员用户 & Goto Echo
- IF %Value% GEQ 5000 Set Newlevel=金卡会员 & Goto Echo
- IF %Value% GTR 1000 (
- IF "%Value%" LEQ "5000" Set Newlevel=银卡会员
- Goto Echo
- )Else (
- Set Newlevel=非会员
- Goto Echo
- )
- :Echo
- Echo %Newlevel%
- Pause>Nul
复制代码
上面这个昨天昏沉写的,有个更简单的方法,昨天竟然没想到。
- @Echo Off&SetLocal EnableDelayedExpansion
- Set /P Value=请输入一个数值:
- IF %Value% LEQ 1000 Set Newlevel=会员用户 & Goto Echo
- IF %Value% GEQ 5000 (
- Set Newlevel=金卡会员
- Goto Echo
- )Else (
- Set Newlevel=银卡会员
- Goto Echo
- )
- :Echo
- Echo %Newlevel%
- Pause>Nul
复制代码
绝对是两个判断就搞定的东西
作者: CrLf 时间: 2012-1-3 02:00
回复 8# 冷玉公子
当时手机回复的,不过好像手机输入法中的 + 号回复后变成了空格...已经修正并加了注释。
作者: cjiabing 时间: 2012-1-3 10:32
本帖最后由 cjiabing 于 2012-1-3 10:40 编辑
- :input 这样写你好理解些:
- set newscore=
- set /p newscore=请输入:
- if "%newscore%"=="" goto input
- if %newscore% lss 1000 set newlevel='会员用户'
- if %newscore% gtr 5000 set newlevel='金卡用户'
- if %newscore% gtr 1000 if %newscore% lss 5000 set newlevel='银卡用户'
- echo;
- echo;%newlevel%
- echo;&pause&goto input
- 你要嵌套可以这样:
- if %newscore% lss 1000 (set newlevel='会员用户') else (if %newscore% lss 5000 (set newlevel='银卡用户') else (newlevel='金卡会员'))
复制代码
作者: Hello123World 时间: 2012-1-5 16:36
这个不要处理临界值吗?=1000,=5000
作者: applba 时间: 2012-1-5 19:52
回复 2# yyykkkyyyy
最好处理一下特殊情况
0~1000
1000-5000
5000~Max
有没有考虑 %newscore%是非数字?
作者: yyykkkyyyy 时间: 2012-1-6 00:39
回复 13# applba
似乎仅就解决顶楼问题没必要深究,我只觉得应该加上引号比较更严谨。如果是探讨代码方面,CrLf版主已指出一条适合更多判断范围时的简便方式,然后针对3 4楼的要求,又有多位热心解答的,我看没什么好补充的
作者: lovealei 时间: 2012-1-14 18:58
本帖最后由 lovealei 于 2012-1-14 18:59 编辑
谢谢楼上的各位,问题已经解决了,
0~999 会员用户
1000-4999 银卡会员
5000~Max 金卡会员
%newscore%是一个数值,从数据库中获取的,不会是非数值,而且是整数,这时只是为了方便测试才弄的的,实际上不需要输入或设置,
作者: lovealei 时间: 2012-1-14 19:11
这个不要处理临界值吗?=1000,=5000
Hello123World 发表于 2012-1-5 16:36
这里要的是小于1000为会员用户,大于999小于4999为银卡会员,大于4999为金卡会员,测试后没有问题的
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |