Как объединить строки в командном файле Windows? - PullRequest
69 голосов
/ 08 января 2010

У меня есть каталог, для которого я хочу перечислить все файлы .doc с ;.

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

for /r %%i In (*.doc) DO echo %%i

Но теперь я хочу поместить их все в переменную, добавить между ними ; и повторить их все сразу.
Как я могу это сделать?

set myvar="the list: "
for /r %%i In (*.doc) DO <what?>
echo %myvar%

Ответы [ 3 ]

58 голосов
/ 08 января 2010

А как же:

@echo off
set myvar="the list: "
for /r %%i in (*.doc) DO call :concat %%i
echo %myvar%
goto :eof

:concat
set myvar=%myvar% %1;
goto :eof
44 голосов
/ 08 января 2010

Основываясь на решении Рубенса, вам нужно включить отложенное расширение переменных env (введите "help setlocal" или "help cmd"), чтобы var правильно вычислялся в цикле:

@echo off
setlocal enabledelayedexpansion
set myvar=the list: 
for /r %%i In (*.sql) DO set myvar=!myvar! %%i,
echo %myvar%

Также учтите следующее ограничение ( MSDN ):

Максимальная индивидуальная среда переменный размер 8192 байта.

0 голосов
/ 12 ноября 2015

Обратите внимание, что переменные @fname или @ext могут быть просто объединены. Это:

forfiles /S /M *.pdf /C "CMD /C REN @path @fname_old.@ext"

переименовывает все файлы PDF в "filename_old.pdf"

...