批处理 - if语句和负值

时间:2014-01-29 01:49:01

标签: batch-file

我正在尝试使用负数,但显而易见我正在做一些愚蠢的事情。 随附的脚本将始终显示:

testA = 15
testB = -15

testA GTR 0
testA GEQ 0

testB GTR 0
testB GEQ 0

到目前为止,我的印象是-15 <= 0。 我做错了什么?

批处理脚本:

@echo off

set /a testA = 15
set /a testB = -15

echo testA = %testA%
echo testB = %testB%
echo(

if %testA% GTR "0" echo testA GTR 0
if %testA% GEQ "0" echo testA GEQ 0
if %testA% LEQ "0" echo testA LEQ 0
if %testA% LSS "0" echo testA LSS 0
echo(

if %testB% GTR "0" echo testB GTR 0
if %testB% GEQ "0" echo testB GEQ 0
if %testB% LEQ "0" echo testB LEQ 0
if %testB% LSS "0" echo testB LSS 0
echo(

pause

1 个答案:

答案 0 :(得分:4)

你确实是对的。数学生理学协会尚未制定关于整数排序的法律的任何最近的变化,所以你的问题必须放在其他地方: - )

实际上,导致此问题的是"值周围的0引号。摆脱它们。当你这样做时,你会得到更合理的输出:

testA = 15
testB = -15

testA GTR 0
testA GEQ 0

testB LEQ 0
testB LSS 0

由于"0"和关联运算符实际上是字符串比较而不是数字运算符,因此gtr案例不起作用的原因。他们为数字工作的原因深深埋藏在if陈述的帮助中:

  

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

由于"不能被视为“数字数字”,因此执行的比较是基于字符串的,并且在ASCII中,"(代码点0x22)小于 -的任何数字(0x30到0x39)或testB符号(0x2d)。