【问题标题】:Number Comparisons in Batch Code批处理代码中的数字比较
【发布时间】:2013-03-25 10:24:41
【问题描述】:

我在 Batch 代码中难以进行 和 == 等数字比较。我所做的是生成一个随机数并使用该答案做某事,这就是我写的:

set rand=%random%
set rand=%rand:~1,1% 
If %rand%==9 goto nine
If %rand%>5 goto above 5
If %rand%>1 goto above 1
If %rand%==0 goto zero

当我运行它时,代码就会关闭。我尝试在被比较的两个对象和不等式之间放置空间,但它仍然不起作用。

请记住,这是 Windows 上的批处理代码。

【问题讨论】:

  • <> 不能批量工作,在命令行见if /?
  • 请记住,您通常也想在这些上使用引号,例如 if "10" gtr "5" goto above5

标签: batch-file numbers comparison inequalities


【解决方案1】:

for if 命令使用这些键代替等号和大于号;

EQU - equal
NEQ - not equal
LSS - less than
LEQ - less than or equal
GTR - greater than
GEQ - greater than or equal

对于 Equ tho,我建议使用 == 而不是 equ。更容易输入。

【讨论】:

    【解决方案2】:

    阅读HELP IF,然后试试这个

    if %rand% equ 9 goto nine
    if %rand% gtr 5 goto above5
    goto below5
    

    注意标签名称不能包含空格

    作为额外奖励,阅读 HELP SET 并将尝试获取随机 0 到 9 数字的方式更改为

    set /a rand=%random% %% 10
    

    【讨论】:

    • 哦,当然!阅读HELP SET。非常好的建议。这里有几个陷阱。尚不清楚set rand=%rand:~1,1% 是否旨在获取字符串的FIRST 字符。它实际上会得到SECOND,因为子字符串使用零基作为起始位置。但是,获得FIRST 字符将导致选择严重偏斜。 %random% 返回的数字字符串是 0..32767。这意味着在 32768 个组合中只有 ONE 结果以 0 开头,但有 11111 个以 1 开头,11111 个以 2 开头。
    • 如果故意选择set rand=%rand:~1,1% 来获取SECOND 字符,这将导致更均匀的分布,那么对于%RANDOM%=0..9(只有32768 的10 个结果)然后RAND 将被设置为 [nothing],这将对 IF 语句造成严重破坏,因为第一个比较字符串将为空,从而扰乱语法。虽然set /a... 方法会工作,但使用set rand=%rand:~-1% 会更简单,它返回randLAST 字符,并且完全一样。或set /a rand=%random:~-1% 省了一步,而且更简单。
    • 正确,我怀疑建议%rand:~-1%%random% %% 10,因为对于目前的情况它没有任何区别。但是%random% %% 10 更灵活。您可以将 10 更改为另一个数字以具有不同的范围(例如,将 6 用于未倾斜的骰子)
    猜你喜欢
    • 2013-02-03
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2013-07-19
    • 1970-01-01
    相关资源
    最近更新 更多