【问题标题】:if "14" LEQ "7" () failureif "14" LEQ "7" () 失败
【发布时间】:2015-12-08 04:22:22
【问题描述】:

我正在制作一个更改 .gcd 文件中坐标值的程序,我得到了单坐标线,但双坐标线没有。该程序应该将双坐标分开并将它们作为单坐标单独运行。为了实现这一点,我将坐标可能出现的形式分类到不同的代码部分,以提供正确的输出。使用字符串的长度,我可以轻松地对它们进行排序。在编程时,我遇到了一个简单的问题

IF " " LEQ " " ()

命令。给定值它会得到错误的结果。一个很好的例子是:

@echo off

:start
if "14" LEQ "7" goto next
echo this should be printed
pause
exit /b

:next
echo this shouldn't be printed
pause
exit /b

删除“”似乎可以解决问题,但我需要比较变量,这些变量可以有空格,以证明括号是正确的。所以问题是:

为什么解释器会得到错误的结果,我该如何轻松解决这个问题?

谢谢,-汤姆

【问题讨论】:

    标签: windows batch-file if-statement compare


    【解决方案1】:
    if "14" LEQ "7" goto next
    

    这会进行字典字符串比较,其中 "14"

    如您所述,如果您去掉引号,以下内容将进行数值比较。

    if 14 LEQ 7 goto next
    

    这与if /?帮助一致:

    这些比较是通用的,如果 string1 和 string2 都由所有数字组成,则字符串将转换为数字并执行数字比较。

    引号(在第一种情况下是被比较的字符串的一部分)不是数字,因此不执行数字转换,并且通过词法规则对字符串进行比较。

    你也说but I need to compare variables, which can have spaces。但是,数值确实/不能包含空格并且不需要引号。相反,一旦用引号括起来,它就不再是一个数值,而是一个字符串。因此,您必须提前决定/区分是否要比较数字值和字符串值。

    【讨论】:

    • 谢谢!这完美地回答了我的问题。
    猜你喜欢
    • 2014-09-01
    • 1970-01-01
    • 2015-05-29
    • 2019-04-27
    • 1970-01-01
    • 2019-11-26
    • 2018-02-02
    • 2019-01-26
    • 2014-08-17
    相关资源
    最近更新 更多