Supprimer les zéros non significatifs dans le fichier de commandes
Dans mon application, j'obtiens un nombre a de zéros. Je suis en train de couper les zéros et d'obtenir le nombre réel. J'ai essayé d'utiliser /a
interrupteur qui estime droite de l'affectation comme une expression arithmétique. J'ai donc essayé:
SET /a N = 00027
Ci-dessus m'a donné la sortie de 23 qui est l'équivalent décimal d'un nombre octal 27. Ensuite, j'ai trouvé cette solution en ligne.
SET N = 00027
SET /a N = 1%N%-(11%N%-1%N%)/10
Cela semble de travail et donne de la sortie 27. Est-il beaucoup plus facile façon de couper les zéros non significatifs dans un fichier batch?
- Pas ce que je peux trouver. 🙂 Le problème est que, comme vous pouvez le voir, le premier zéro sans suite
x
indique que vous êtes en utilisant un nombre octal (0x0027
indique un nombre hexadécimal). La seule façon de les éliminer est de concaténer une valeur non nulle sur la gauche pour faire apparaître une valeur décimale, puis retirez la quantité ajoutée. (Vous pouvez voir le nombre de formats pris en charge en utilisant une valeur non valide dans l'opération, commeset /a N=d/1
, qui produit " numéro non Valide. Les constantes numériques sont décimales (17), hexadécimal (0x11), ou octal (021).". - Vous avez trouvé un one-liner solution qui répond à ce que vous voulez. Quoi d'autre avez-vous besoin? 🙂
- Voir aussi: robvanderwoude.com/battech_leadingzero.php
Vous devez vous connecter pour publier un commentaire.
La méthode que vous avez trouvé est de très bonne qualité. Il prend en charge les nombres jusqu'à 99,999,999 et est très rapide.
Il y a un moyen plus simple d'utiliser SET /UNE qui fonctionne avec des nombres jusqu'à 9999. Il utilise le modulo. La méthode ne peut pas être étendue à un plus grand nombre.
La FOR /F méthode que Dale posté travaille avec "tout" nombre de taille (jusqu'à 8191 chiffres). Cependant, il a juste besoin d'un peu plus de travail pour gérer les valeurs zéro.
for /f
méthode ne fonctionne pas pour les zéros, depuis lefor/f
jeux den
à rien. Je préfère vérifier zéro comme ceci:if not defined n set /a n = 0
"%n%"
est vide ou contient des espaces. Mais je n'ai jamais pris la peine de tester (boo pour moi). Je suis choqué que vous êtes la première personne à remarquer l'erreur. J'ai corrigé le post. MerciVous pouvez utiliser
FOR /F
pour supprimer les zéros non significatifs.Comme vous pouvez le voir, le
delims
est mis à 0. Ce sera fait 0 comme un séparateur. Dans le même temps, avectokens
de*
cela permettra d'assurer que le 0 initial seront supprimés tandis que le reste de la ligne sera traitée (y compris de fuite 0).Vous pouvez vous référer à ce lien pour plus d'informations sur la suppression de pointe 0.
P. S. N'oubliez pas de les utiliser
%%a
au lieu de%a
lorsque vous sont en cours d'exécution sur le fichier de commandes dansFOR /F
.La sortie de commande est assez bon à la compensation de zéros:
Avec cela, vous pouvez utiliser jusqu'à un entier de 32 bits limite et le morceau de code est vraiment petit, malgré l'appel de plus de cmd.exe pourrait nuire à la performance.
Si c'est seulement une question de supprimer tous les zéros, vous pouvez le faire comme ceci: