Windows Batch: Zmienne wewnątrz pętli for

Za każdym razem, kiedy przychodzi mi napisać jakikolwiek plik wsadowy windows ogarnia mnie chęć bicia głową w biurko.

Każdy rozsądny człowiek spodziewałby się, że poniższa pętla doda do zmiennej CLASSPATH wszystkie pliki jar znajdujące się w wymienionym katalogu:

for %%g in (target\dependency\*.jar) do set "CLASSPATH=%CLASSPATH%;%%g"

Tymczasem kod ten doda tylko ostatni plik. Wszystko dlatego, że wywołując polecenie ‚for’ wartość zmiennej zostanie zewaluowana na początku (tak jak przy wywołaniu komendy), a nie przy każdej iteracji pętli (jak w językach skryptowych z prawdziwego zdarzenia).

Rozwiązaniem jest włączyć czarodziejskie windziane rozszerzenia i odwoływac się do zmiennej znakiem ! zamiast %:

setlocal enableextensions enabledelayedexpansion
for %%g in (target\dependency\*.jar) do set "CLASSPATH=!CLASSPATH!%%g;"

Zostaw komentarz