web-dev-qa-db-fra.com

Comment concaténer des chaînes dans un fichier batch Windows?

J'ai un répertoire pour lequel je veux lister tous les fichiers .doc avec un ;.

Je sais que la commande de lot suivante renvoie tous les fichiers:

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

Mais maintenant, je veux les mettre tous dans une variable, ajouter un ; entre les deux et les afficher tous en même temps.
Comment puis je faire ça?

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

Qu'en est-il de:

@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
58
Rubens Farias

Sur la base de la solution de Rubens, vous devez activer l’extension retardée des variables env (type "help setlocal" ou "help cmd") afin que la variable soit correctement évaluée dans la boucle:

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

Prenez également en compte la restriction suivante ( MSDN ):

L'environnement individuel maximum taille variable est 8192bytes.

44
devio

Notez que les variables @fname ou @ext peuvent être simplement concaténées. Ce:

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

renomme tous les fichiers PDF en "filename_old.pdf"

0
Pierre