2017-05-03 4 views
1

J'ai regardé mais ne peux pas trouver une spécification de précision quand un fichier batch IF est comparé numériquement avec une comparaison numérique op (par exemple gtr) au lieu de traiter ses arguments comme des chaînes.quand est-ce que le lot IF compare-op fait numériquement

J'ai trouvé cette question Windows batch file IF failure - How can 30000000000000 equal 40000000000? mais son explication - Si vous avez des caractères non numériques, alors IF fait une comparaison de chaînes - n'est pas complète. Par exemple:

@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 

Seul le dernier IF ci-dessus se fait numériquement et des échos plus ... encore ni côté de son-op comparer est composé uniquement de chiffres.

Répondre

3

Si les deux arguments peuvent être convertis en un numérique, la comparaison est effectuée numériquement, sauf si l'un des côtés est cité.

Par conséquent, étant donné que +1000 et 0x99 sont à la fois numérique selon les règles d'analyse syntaxique (voir set /? alors la comparaison est effectuée numériquement (une chaîne à partir 0x est interprété comme un hexagone et par ailleurs si elle commence 0, puis octal)