@echo off
SET first=0
FOR %%N IN (hello bye) DO (
SET first=1
echo %first%
echo %%N
)
Es scheint, dass die Variable "first" immer 0 ist. Warum?Warum ändert sich diese Chargenvariable niemals, selbst wenn sie eingestellt ist?
@echo off
SET first=0
FOR %%N IN (hello bye) DO (
SET first=1
echo %first%
echo %%N
)
Es scheint, dass die Variable "first" immer 0 ist. Warum?Warum ändert sich diese Chargenvariable niemals, selbst wenn sie eingestellt ist?
Mit Batch-Dateien werden Variablen erweitert, wenn ihr Befehl gelesen wird - also wäre das, sobald die for
ausgeführt wird. An diesem Punkt sagt es nicht mehr echo %first%
, es sagt wörtlich echo 0
, weil das der Wert am Punkt der Expansion war.
Um dies zu umgehen, müssen Sie die verzögerte Erweiterung verwenden, indem Sie Ihren Variablennamen mit !
anstelle von %
umgeben - das wäre also echo !first!
. Dazu müssen Sie möglicherweise cmd.exe mit dem Parameter/V starten oder am Anfang der Batch-Datei setlocal enabledelayedexpansion
verwenden (kurz nach echo off
).
Wenn Sie set /?
eingeben, sehen Sie am Ende der Ausgabe eine viel detailliertere Erklärung.
Mögliche Duplikate von [Windows Batch-Variablen werden nicht gesetzt] (https://stackoverflow.com/questions/9681863/windows-batch-variables-wont-set) –