Похоже, вы забыли использовать восклицательный знак (" !
") с переменной, которую вы установили в цикле.
Для разрешения просто используйте !_filelist!
а не %_filelist%
.
пример
SETLOCAL EnableDelayedExpansion
cd /D %~dp0
set _filelist=
for /f "delims=|" %%f in ('dir /b %CD%') do (
set "_filelist=!_filelist!,%%f"
)
echo %_filelist%
pause
Задержка расширения приведет к тому, что переменные в пакетном файле будут расширяться во время выполнения, а не во время анализа, эта опция включается командой SETLOCAL EnableDelayedExpansion. [1]
Когда действует отложенное расширение, переменные могут быть немедленно прочитаны с помощью!variable_name! вы также можете читать и использовать% variable_name%, которое покажет начальное значение (развернуто в начале строки). [1]
Дополнительные ресурсы
Бонус Пример
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
Вышеприведенный метод установит начальную переменную set _filelist=,
переменную с одним значением запятой, поэтому первая итерация будет ,,
а затем первое итеративное значение, а не ноль плюс одна запятая, вы получаете две запятые, которые задают уникальный шаблон для работать с разбором.
Затем вы можете использовать функцию Переменной замены, чтобы разобрать двойные запятые (,,
), и заменить их пустым значением. Окончательное итерированное и установленное значение переменной будет затем проанализировано вне цикла с помощью set _filelist=%_filelist:,,=%
удаляющего двойное запятое с префиксом.