Warum sind Sie Variablennamen in Paaren von %
Zeichen umschließt? Die übliche Syntax zum Lesen einer Variablen lautet %var1%
.
set /A
können Variablen auch ohne Prozentzeichen lesen, also verwenden Sie set /a b=var1 %% 25
.
Die andere set /A
Befehlszeile kann in set /A var1+=1
geändert werden.
Es gibt eine problematische Variable in Ihrem Code, nämlich b
, weil Sie schreiben und es innerhalb derselben (parenthesised) Codeblock zu lesen, so %b%
gelesen wird, wenn die gesamte for
Schleife analysiert wird, an welcher Stelle es ist höchstwahrscheinlich leer. Für solche Fälle müssen Sie delayed expansion anwenden, damit die Variable zur Ausführungszeit gelesen wird. Um es zu aktivieren, verwenden Sie den Befehl setlocal
; um es tatsächlich zu verwenden, schreiben Sie !b!
anstelle von %b%
. Hier
ist der Fixcode:
set /A var1=0
for /R "folder" %%G in (.) do (
pushd "%%~G"
set /A b=var1 %% 25
setlocal EnableDelayedExpansion
if !b! EQU 0 (
timeout /T 3
)
endlocal
set /A var1+=1
popd
)
Hier I setlocal
und endlocal
innerhalb der Schleife angeordnet, so dass eine verzögerte Expansion während der Expansion (Lesen) des for
Schleifenvariable %%G
, weil im Falle deaktiviert wird Ausrufungs enthält Marken, sie würden sonst verloren gehen.
Nun habe ich es geschafft aus dem ungültigen Operanden zu erhalten, aber ich kann nicht scheinen, um die Modulo-Operator zu erhalten –
arbeiten Sie müssen nur '% var1%', nicht '%% var1 %%'. – SomethingDark
@SomethingDark, im Allgemeinen hast du recht, aber hier ist eine verzögerte Erweiterung erforderlich (zumindest für '! B!') ... – aschipfl