Parece que você esqueceu de usar o ponto de exclamação (" !
") com a variável que você definiu dentro do loop.
Para resolver, basta usar !_filelist!
em vez de %_filelist%
.
Exemplo
SETLOCAL EnableDelayedExpansion
cd /D %~dp0
set _filelist=
for /f "delims=|" %%f in ('dir /b %CD%') do (
set "_filelist=!_filelist!,%%f"
)
echo %_filelist%
pause
Delayed Expansion will cause variables within a batch file to be expanded at execution time rather than at parse time, this option is turned on with the SETLOCAL EnableDelayedExpansion command. [1]
When delayed expansion is in effect, variables can be immediately read using !variable_name! you can also still read and use %variable_name% that will show the initial value (expanded at the beginning of the line). [1]
Mais recursos
Exemplo de bônus
SETLOCAL EnableDelayedExpansion
cd /D %~dp0
set _filelist=,
for /f "delims=|" %%f in ('dir /b %CD%') do (
set "_filelist=!_filelist!,%%f"
)
set _filelist=%_filelist:,,=%
echo %_filelist%
pause
O método acima definirá a variável set _filelist=,
inicial com um único valor de vírgula para que a primeira iteração seja ,,
e, em seguida, o primeiro valor iterado, em vez da vírgula nula mais uma vírgula. padrão único para trabalhar com a análise.
Você pode usar a funcionalidade Substituir variável para analisar as aspas duplas ( ,,
) e substitua aqueles com um valor em branco. A iteração final e o valor da variável set serão então analisados de fora do loop com set _filelist=%_filelist:,,=%
removendo o valor prefixado por vírgula dupla.