Pergunta

Eu tenho um diretório para o qual eu quero listar todos os arquivos .doc com um ;.

Eu sei as seguintes ecos de comando em lote todos os arquivos:

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

Mas agora eu quero colocá-los todos em uma variável, adicionar um ; no meio e eco-los todos de uma vez.
Como posso fazer isso?

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

Solução

E:

@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

Outras dicas

Com base na solução de Rubens, você precisa habilitar expansão atrasada de variáveis ??env (tipo 'ajuda setlocal' ou 'ajuda cmd') para que o var está correctamente avaliados no loop:

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

Considere também a seguinte restrição ( MSDN ):

O ambiente máxima individual tamanho variável é 8192bytes.

Note que as variáveis ??@fname ou @ext pode ser simplesmente concatenado. Isto:

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

renomeia todos os arquivos PDF para "filename_old.pdf"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top