4

Я пытаюсь создать список файлов для передачи программе в качестве аргумента, но у меня проблемы с этим.

Мой желаемый вывод должен быть: file1.jpg, file2.bmp, file3.docx

Летучая мышь, которую я пытаюсь использовать, это:

SETLOCAL EnableDelayedExpansion
cd /D %~dp0
set _filelist=
for /f "delims=|" %%f in ('dir /b %CD%') do (
  set "_filelist=%_filelist%,%%f"
)
echo %_filelist%
pause

Но он выводит только последний файл в списке:, ,lastfile.xyz

Что я делаю не так?

1 ответ1

4

Похоже, вы забыли использовать восклицательный знак (" !") с переменной, которую вы установили в цикле.

Для разрешения просто используйте !_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:,,=% удаляющего двойное запятое с префиксом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .