horn-christian
Goto Top

Batch FOR-Schleife Modulo auf Variable, fehlender Operator

Hi,

Ziel ist es, aus den 52 Wochen des Jahres maximal 8 Sätze zu generieren - kein Problem, sollte mit Modulo einfach zu handhaben sein, ab dem neunten fängt das Spiel wieder von vorne an, die Woche hole ich mir über die Unixtools, dass nach Silvester in der 52sten Woche (Modulo 4) wieder bei 1 begonnen wird ist zu vernachlässigen.

Beim testen bin ich so weit gekommen

@echo OFF
cls

:: um Variablen innerhalb von FOR-Schleifen benutzen können
SETLOCAL ENABLEDELAYEDEXPANSION

FOR /L %%i IN (1,1,30) DO (
	set /a bla=%%i
	set /a fasel=!bla! %7
	set bla
	set fasel
)

bla entspricht dabei jedoch immer fasel, Ausgabe demnach

bla=1
fasel=1
bla=2
fasel=2
...
bla=20
fasel=20
bla=21
fasel=21
...

den Modulo bekomme ich so nicht raus. Hat da jemand einen Tipp für mich?

Gruss, Christian.

Content-Key: 187055

Url: https://administrator.de/contentid/187055

Printed on: April 20, 2024 at 00:04 o'clock

Member: horn-christian
horn-christian Jun 26, 2012 at 09:14:11 (UTC)
Goto Top
Fehler gefunden

In a batch script, the Modulus operator (%) must be doubled up to (%%). 

@echo OFF
cls

:: um Variablen innerhalb von FOR-Schleifen benutzen können
SETLOCAL ENABLEDELAYEDEXPANSION

FOR /L %%i IN (1,1,30) DO (
	set /a bla=%%i
	set /a fasel=!bla %% 7
	set bla
	set fasel
)

ergibt

bla=1
fasel=1
...
bla=7
fasel=0
...
Member: pieh-ejdsch
pieh-ejdsch Jun 26, 2012 at 12:27:41 (UTC)
Goto Top
moin christian,

:: um Variablen innerhalb von FOR-Schleifen benutzen können
SETLOCAL ENABLEDELAYEDEXPANSION
wenn Du numerische Variablen innerhalb von Klammern berechnest, dann ist die Verzögerte Auflösung vernachlässigbar.
Du rechnest mit Variablen ohne Prozent- bzw Ausrufezeichen.
Da Du die Variable mit Set ausgibst ist auch keine Verzögerung nötig.
Nur bei anderen Verwendungen ist ENABLEDELAYEDEXPANSION nötig.

@echo off
setlocal disabledelayedexpansion
set /a Modulo = 7
FOR /L %%i IN (1,1,30) DO (
  set /a fasel=%%i %%Modulo
  set /a bla=%%i
  set bla
  set fasel
  setlocal enabledelayedexpansion
  echo bla=!bla!
  endlocal
)

Da kannste ja den Beitrag als gelöst Markieren...

Gruß Phil