2010-01-08 2 views
67

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

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

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

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

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

ответ

58

насчет:

@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 
+2

Большое спасибо за этот ответ! Это просто решило проблему, которая динамически создавала путь класса к пакетному файлу :) Добавляя необходимые изменения, но моя проблема делала concat, и это исправило это! – Charliemops

43

на основе решения Рубенса, то Вам необходимо включить Отложенная Расширение ENV переменных (типа „помощь SETLOCAL“ или „помощь CMD“), так что переменная правильно оценивали в цикле:

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

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

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

+1

Ограничение неверно. Максимальный размер переменной среды в Windows составляет около 64 килобайт, поэтому около 32 тыс. Символов. Однако в пакетных файлах есть проблема, что максимальная длина командной строки составляет 8190 символов, поэтому каждая переменная среды, которую вы там устанавливаете, должна быть короче. Кроме того, общее ограничение на 65 KiB ограничено. Я просто создал переменные окружения на нескольких MiB без проблем. – Joey

+2

Ссылка говорит 65 ТЫСЯЧ КБ, которая будет равна 64 МБ. Я не буду спорить, так как я никогда не занимался этим. – devio

+1

Ничего себе, большое вам спасибо! Вы сделали свой день :-) – Julien

0

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

forfiles /S /M *.pdf /C "CMD /C REN @path @[email protected]" 

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

Смежные вопросы