Você tem alguns lugares em que usou a expansão rápida (com %
delimitadores) onde deveria ter usado a expansão atrasada (com !
delimitadores). Correção que parece obter o comportamento desejado:
@echo on
set LOGFILE=batch.log
call :LOG > %LOGFILE%
exit /B
:LOG
setlocal EnableDelayedExpansion
set n=0
set count=0
set vector[%n%]=0
for /f "tokens=* delims=." %%i in ('dir /b /a-d "C:\Test"') do (
set filename=%%i
for /f "tokens=2 delims=_." %%a in ("!filename!") do (
set vector[!n!]=%%a
for /f "tokens=* delims==" %%v in ('set vector[!n!]') do @echo %%v
)
set /A n+=1
)
Para ser claro, as alterações que fiz foram:
for /f "tokens=2 delims=_." %%a in ("%filename%") do (
alterado para:
for /f "tokens=2 delims=_." %%a in ("!filename!") do (
e:
for /f "tokens=* delims==" %%v in ('set vector[%n%]') do @echo %%v
alterado para:
for /f "tokens=* delims==" %%v in ('set vector[!n!]') do @echo %%v
Sem essas alterações, %filename%
está sempre expandindo para a sequência vazia e %n%
está sempre expandindo para 0 (o valor que foi definido quando a% externafor
começou); no último caso, isso apenas estragou sua saída (você usou corretamente !n!
ao atribuir a vector
, por isso tinha os valores corretos, apenas imprimiu a primeira entrada mesmo quando adicionou entradas em índices subsequentes ).