Como concatenar strings em um arquivo de lote do Windows?
-
19-09-2019 - |
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%
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"