web-dev-qa-db-fra.com

Comment écrire une commande de fichier batch Windows avec loop et% operator?

Je veux écrire le code suivant dans un fichier de commandes. Comment puis je faire ça?

for (i=0; i<100; i++)
{
   rem = i % 10;
   if(rem == 0)
   {
     // ECHO something
   }
   else
   {
     ECHO i         
   }
}
5
Bobs

C'est assez compliqué, à cause de la façon dont le développement de variable dans les boucles fonctionne dans les fichiers batch. Les fichiers de commandes ont leur propre construction forname__; pas besoin de perdre son temps avec gotoname__s . %% est l'opérateur modulo dans les fichiers de commandes, car % est réservé à l'expansion des variables.

Ce code fonctionne pour moi:

@echo off
setlocal enabledelayedexpansion
for /l %%i in (0,1,99) do (
  set /a remainder = %%i %% 10
  if !remainder! == 0 (
    echo something
  ) else (
    echo %%i
  )
)
endlocal
11
Glorfindel

Modulo peut être fait avec set /a . Les boucles peuvent être réalisées avec goto , exactement comme vous convertissez ces boucles for en goto en C

@echo off
set "i=0"
:loop
if %i% equ 100 goto :endfor
set /a "mod=i %% 10"
if %mod% equ 0 (
    echo something %mod%
) else (
    echo %i%
)
set /a "i+=1"
goto :loop
:endfor

Notez que rem est une commande permettant de démarrer un commentaire. L'utilisation de rem dans le script peut entraîner un comportement indésirable.

La boucle peut être simplifiée avec for /l mais vous devez maintenant activer l’extension retardée car tout le corps de for est analysé en une fois.

2
phuclv