Batch file 批处理中的数字错误

Batch file 批处理中的数字错误,batch-file,Batch File,考虑以下代码: @echo off setlocal enabledelayedexpansion set HOUR=00 set MINS=10 if %HOUR% EQU 00 ( set HOUR=12 set /A minDiff=60-!MINS!&set expectedTime=1^.!minDiff! ) echo expectedTime=!expectedTime! 作为变量expectedTime值的预期输出必须为1.50,但它输出1。只有给出的错误是:

考虑以下代码:

@echo off

setlocal enabledelayedexpansion

set HOUR=00
set MINS=10

if %HOUR% EQU 00 (
set HOUR=12
set /A minDiff=60-!MINS!&set expectedTime=1^.!minDiff!
)

echo expectedTime=!expectedTime!
作为变量expectedTime值的预期输出必须为1.50,但它输出1。只有给出的错误是: 无效数字。数字常量为十进制(17)、十六进制(0x11)或八进制(021)。 请帮忙!!
感谢您在IF语句下更改为:

 %HOUR% = 12

这应该可以解决这个问题。

你发布的代码对我来说很好。我怀疑你是在与你发布的条件稍有不同的情况下出错的

SET/A有一个非常不幸的特性,即任何前导为0的数字都被视为八进制符号。因此,08或09的值对于SET/a来说不是有效的数字,它将给出您引用的错误消息。要获得正确的值,必须将分钟表示为8或9(无前导0)。请注意,00到07可以正常工作,因为八进制和十进制解释产生相同的值

处理潜在的不需要的前导零经常使用的一个技巧是,在数字字符串前面加上适当大的10次方前缀,然后使用mod(余数)运算符提取所需的值。例如,如果您从未期望值大于9999,则可以使用以下方法安全地处理变量VAL中的潜在前导零

set /a "VAL=10000%VAL% %% 10000"
上述技术的优点在于,它可以被合并到更大的数学计算中,而无需在计算之前单独去除前导零