O comando SET
está totalmente bem. O que está acontecendo é que todo o bloco DO
no comando FOR
tem suas variáveis substituídas quando é lido pela primeira vez. Nesse ponto, a variável test2
está vazia, de modo que é o que é ecoado na saída.
Para corrigir isso, você precisa usar um SETLOCAL EnableDelayedExpansion antes do loop for e alterar o echo %test2%
para echo !test2!
da seguinte forma:
@echo off
set test1=hello
echo 0 %test1%
setlocal enabledelayedexpansion
for %%F in ( *.txt ) do (
set test2=%%F
echo 1 %test1%
echo 2 !test2!
echo 3 %%F
)
endlocal
pause