Board logo

标题: [数值计算] [已解决]批处理如何根据数值是否在指定范围定义不同变量值? [打印本页]

作者: 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

  1. set newlevel=银卡会员
  2. if %newscore% lss 1000 set newlevel=会员用户
  3. if %newscore% geq 5000 set newlevel=金卡会员
复制代码

作者: lovealei    时间: 2012-1-1 10:44

本帖最后由 lovealei 于 2012-1-1 10:47 编辑
  1. set newscore=11900
  2. If %newscore% LSS 1000 ( set newlevel=会员用户&set newlevelid=1)  else ( If %newscore% LSS
  3. 5000 (set newlevel=银卡会员&set newlevelid=2) else (set newlevel=金卡会员&set newlevelid=3))
  4. echo %newlevel%
  5. echo %newlevelid%
  6. 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 编辑
  1. set c=1000
  2. rem 假设 c 为 1000
  3. set /a "n=1+!!c+!!(c/1000)+!!(c/5000)"
  4. rem n 至少为 1,当 c 不为 0 时加 1,c 大于1000 时再加 1,大于 5000 时又加 1
  5. for /f "tokens=%n%" %%a in ("非会员 会员用户 银卡会员 金卡会员") do echo %%a
  6. 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 编辑

我觉得这样写就可以了吗
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. Set /P Value=请输入一个数值:
  3. IF %Value% LEQ 1000 Set Newlevel=会员用户 & Goto Echo
  4. IF %Value% GEQ 5000 Set Newlevel=金卡会员 & Goto Echo
  5. IF %Value% GTR 1000 (
  6. IF "%Value%" LEQ "5000"  Set Newlevel=银卡会员
  7. Goto Echo
  8. )Else (
  9. Set Newlevel=非会员
  10. Goto Echo
  11. )
  12. :Echo
  13. Echo %Newlevel%
  14. Pause>Nul
复制代码


上面这个昨天昏沉写的,有个更简单的方法,昨天竟然没想到。

  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. Set /P Value=请输入一个数值:
  3. IF %Value% LEQ 1000 Set Newlevel=会员用户 & Goto Echo
  4. IF %Value% GEQ 5000 (
  5. Set Newlevel=金卡会员
  6. Goto Echo
  7. )Else (
  8. Set Newlevel=银卡会员
  9. Goto Echo
  10. )
  11. :Echo
  12. Echo %Newlevel%
  13. Pause>Nul
复制代码


绝对是两个判断就搞定的东西
作者: CrLf    时间: 2012-1-3 02:00

回复 8# 冷玉公子


    当时手机回复的,不过好像手机输入法中的 + 号回复后变成了空格...已经修正并加了注释。
作者: cjiabing    时间: 2012-1-3 10:32

本帖最后由 cjiabing 于 2012-1-3 10:40 编辑
  1. :input   这样写你好理解些:
  2. set newscore=
  3. set /p newscore=请输入:
  4. if  "%newscore%"=="" goto input
  5. if  %newscore%  lss 1000 set newlevel='会员用户'
  6. if  %newscore%  gtr 5000 set newlevel='金卡用户'
  7. if  %newscore%  gtr 1000 if  %newscore%  lss 5000  set newlevel='银卡用户'
  8. echo;
  9. echo;%newlevel%
  10. echo;&pause&goto input
  11. 你要嵌套可以这样:
  12. 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