当我尝试比较2个大数字时IF会给出错误的答案.
例如,这个简单的批处理文件
@echo off
setlocal
set n1=30000000000000
set n2=40000000000
if %n1% gtr %n2% echo %n1% is greater than %n2%
if %n1% lss %n2% echo %n1% is less than %n2%
if %n1% equ %n2% echo %n1% is equal to %n2%
Run Code Online (Sandbox Code Playgroud)
产生
30000000000000 is equal to 40000000000
Run Code Online (Sandbox Code Playgroud)
发生了什么,我该如何解决这个问题?
在批处理中,我总是==在使用if命令时使用.(例如:if "19"=="3" echo My computer doesnt know maths)
怎么样对所有其他的(LSS,LEQ,NEQ等)?是不是有什么样!=的NEQ,还是我想Unix的?
我想使用符号的原因是因为我认为有人说文字或数字符号比使用文本变体更有效.
无论哪种方式,我还是想知道.谢谢.
我知道,在比较批处理文件中的内容是否相等时,通常将两边括在引号中,例如
IF "%myvar% NEQ "0"
Run Code Online (Sandbox Code Playgroud)
但是,当使用“大于”或“小于”进行比较时,这不起作用,因为操作数将被视为带有引号的字符串。所以你可以这样做
IF %myvar% GTR 20000
Run Code Online (Sandbox Code Playgroud)
需要注意的是,如果变量 %myvar% 没有声明,那么就像这样做
IF GTR 20000
Run Code Online (Sandbox Code Playgroud)
这是一个语法错误。
我想出了以下解决方法:
IF 1%myvar% GTR 120000
Run Code Online (Sandbox Code Playgroud)
我希望这会导致IF 1 GTR 120000ifmyvar未定义,并且它似乎有效。
这是比较数字和计算未声明变量的安全方法,还是我只是提出了一个全新的警告?
所以 - 这是代码
@echo off
setlocal
for %%a in (a A j J z Z) do for %%c in (d D) do if "%%c" geq "%%a" (echo "%%c" geq "%%a") else (echo "%%c" lss "%%a")
for %%a in (Blue blue BLUE Red red RED) do for %%c in (Pink pink PINK) do if "%%c" geq "%%a" (echo "%%c" geq "%%a") else (echo "%%c" lss "%%a")
Run Code Online (Sandbox Code Playgroud)
结果如下:
Microsoft Windows [Version 10.0.19042.804]
(c) 2020 Microsoft Corporation. All rights reserved.
"d" geq "a" …Run Code Online (Sandbox Code Playgroud)