8
votes

Arithmétique à l'intérieur d'un fichier de lot pour boucle

J'ai une boucle à boucle dans un fichier de commandes qui ressemble à ceci: xxx

la ligne: xxx

ne semble pas faire n'importe quelle division. Quelle est la syntaxe correcte pour diviser chaque y par 25? Je n'ai besoin que du résultat entier de cette division.


1 commentaires

DOS n'a pas pour la capacité de calcul de la boucle et des mathématiques. Seule Windows CMD fait. Ils sont complètement différents


3 Réponses :


1
votes

Cela ne fait rien parce que "y" est juste une lettre. Vous avez besoin de signes de pourcentage pour référencer la variable.

set /a x = %%y/25


3 commentaires

Vous avez raison de y être une lettre. Mais mettre les panneaux de double pour cent ne se divisent toujours pas.


@ dr-rk - il se divise, c'est votre écho qui échoue. Voir Ma réponse


SET / A reconnaît automatiquement les variables , pas besoin de mettre %%



15
votes

Les variables d'environnement ne doivent pas nécessairement être étendues à utiliser dans une déclaration définie / a. Mais pour les variables doit être étendue.

Également, même si votre calcul a fonctionné, l'écho échouerait parce que le pourcentage d'expansion a lieu lorsqu'une déclaration est analysée et la totalité de la construction est analysée à la fois. Donc, la valeur de% x% serait la valeur tel qu'il existait avant que la boucle soit exécutée. Pour obtenir la valeur qui a été définie dans la boucle, vous devez utiliser une expansion retardée. P>

En outre, vous devez supprimer l'espace avant l'opérateur d'affectation. Vous déclarez une variable avec un espace dans le nom. P>

@echo off
setlocal enableDelayedExpansion
for %%A in (100 200 300 400 500) do (
  set n=%%A

  REM a FOR variable must be expanded
  set /a x=%%A/25

  REM an environment variable need not be expanded
  set /a y=n/25

  REM variables that were set within a block must be expanded using delayed expansion
  echo x=!x!, y=!y!

  REM another technique is to use CALL with doubled percents, but it is slower and less reliable
  call echo x=%%x%%, y=%%y%%
)


0 commentaires

0
votes

J'avais le même problème, mais j'avais eu une question entière. Je multiplié après la division mais je dois auparavant. Ce qui se passait est quelque chose comme ça: 1 / 100x100 qui fonctionne comme 1 \ 100 = 0 puis 0x100 = 0 Je l'ai changé à 1x100 / 100 qui fonctionne comme 1x100 = 100 puis 100/100 = 1 xxx


0 commentaires