批处理 IF 比较操作何时以数字方式完成
when is batch IF compare-op done numerically
我已经查看但无法找到关于何时使用数字比较操作(例如 gtr)以数字方式完成批处理文件 IF 比较而不是将其参数视为字符串的规范。
我发现了这个问题 Windows batch file IF failure - How can 30000000000000 equal 40000000000? 但它的解释——如果你有任何非数字字符,然后 IF 进行字符串比较——并不完整。例如:
@echo off& setlocal enabledelayedexpansion
if "123" gtr "99" echo greater
if 099 gtr 10 echo greater
if "+1000" gtr "0x99" echo greater
if 12-1 gtr 3 echo greater
if +1000 gtr 0x99 echo greater
只有上面的最后一个 IF 是用数字完成的并且回声更大...但是 它的比较操作的任何一方都不完全由数字组成。
如果两个参数都可以转换为数字,则比较以数字形式执行,除非任何一方都被引用。
因此,根据解析规则,+1000 和 0x99 都是数字(请参阅 set /?
,然后以数字形式执行比较(以 0x
开头的字符串被解释为十六进制,否则如果它开始 0
,然后是八进制)
我已经查看但无法找到关于何时使用数字比较操作(例如 gtr)以数字方式完成批处理文件 IF 比较而不是将其参数视为字符串的规范。
我发现了这个问题 Windows batch file IF failure - How can 30000000000000 equal 40000000000? 但它的解释——如果你有任何非数字字符,然后 IF 进行字符串比较——并不完整。例如:
@echo off& setlocal enabledelayedexpansion
if "123" gtr "99" echo greater
if 099 gtr 10 echo greater
if "+1000" gtr "0x99" echo greater
if 12-1 gtr 3 echo greater
if +1000 gtr 0x99 echo greater
只有上面的最后一个 IF 是用数字完成的并且回声更大...但是 它的比较操作的任何一方都不完全由数字组成。
如果两个参数都可以转换为数字,则比较以数字形式执行,除非任何一方都被引用。
因此,根据解析规则,+1000 和 0x99 都是数字(请参阅 set /?
,然后以数字形式执行比较(以 0x
开头的字符串被解释为十六进制,否则如果它开始 0
,然后是八进制)