找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 68227|回复: 15

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

[复制链接]
发表于 2012-1-1 10:26:19 | 显示全部楼层 |阅读模式
本帖最后由 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=银卡会员)

我这样写只能表达其中一个,是不正确的,这个表达式要怎么用批处理来写呢?

评分

参与人数 1PB +2 收起 理由
CrLf + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-1-1 10:43:51 | 显示全部楼层
  1. set newlevel=银卡会员
  2. if %newscore% lss 1000 set newlevel=会员用户
  3. if %newscore% geq 5000 set newlevel=金卡会员
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

 楼主| 发表于 2012-1-1 10:44:16 | 显示全部楼层
本帖最后由 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
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

 楼主| 发表于 2012-1-1 10:45:21 | 显示全部楼层
我想了下用IF嵌套,大家帮我看看上面的代码有没有问题
 楼主| 发表于 2012-1-1 10:49:05 | 显示全部楼层
谢谢2楼的,但我只想用一行代码来完成,2楼的思路是我没有想到的,哦,我太笨了
发表于 2012-1-1 11:53:15 | 显示全部楼层
本帖最后由 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 显示对应节数的字段
复制代码

评分

参与人数 1技术 +1 收起 理由
cjiabing + 1

查看全部评分

发表于 2012-1-2 21:48:41 | 显示全部楼层
学学基础吧1`

评分

参与人数 1PB +3 收起 理由
CrLf + 3 乐于助人

查看全部评分

发表于 2012-1-2 23:30:05 | 显示全部楼层
回复 6# CrLf


    老兄真看不懂你的,能解释一下吗。可能我基础也不好 哈哈。
发表于 2012-1-2 23:49:09 | 显示全部楼层
本帖最后由 冷玉公子 于 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
复制代码


绝对是两个判断就搞定的东西

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

发表于 2012-1-3 02:00:39 | 显示全部楼层
回复 8# 冷玉公子


    当时手机回复的,不过好像手机输入法中的 + 号回复后变成了空格...已经修正并加了注释。
发表于 2012-1-3 10:32:35 | 显示全部楼层
本帖最后由 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='金卡会员'))
复制代码
发表于 2012-1-5 16:36:59 | 显示全部楼层
这个不要处理临界值吗?=1000,=5000

评分

参与人数 1PB +3 收起 理由
CrLf + 3 乐于助人

查看全部评分

发表于 2012-1-5 19:52:53 | 显示全部楼层
回复 2# yyykkkyyyy


最好处理一下特殊情况
0~1000
1000-5000
5000~Max
有没有考虑 %newscore%是非数字?
发表于 2012-1-6 00:39:07 | 显示全部楼层
回复 13# applba


    似乎仅就解决顶楼问题没必要深究,我只觉得应该加上引号比较更严谨。如果是探讨代码方面,CrLf版主已指出一条适合更多判断范围时的简便方式,然后针对3 4楼的要求,又有多位热心解答的,我看没什么好补充的
 楼主| 发表于 2012-1-14 18:58:35 | 显示全部楼层
本帖最后由 lovealei 于 2012-1-14 18:59 编辑

谢谢楼上的各位,问题已经解决了,
0~999 会员用户
1000-4999 银卡会员
5000~Max 金卡会员


%newscore%是一个数值,从数据库中获取的,不会是非数值,而且是整数,这时只是为了方便测试才弄的的,实际上不需要输入或设置,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 11:17 , Processed in 0.036260 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表