views:

1205

answers:

2

I have a directory for which I want to list all the .doc files with a ";"

I know the following batch command echos all the files

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

But know I want to put them all in a variable, add a ';' in between and echo them all at once. How can I do that?

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

What about:

@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
Rubens Farias
+1  A: 

Based on Rubens' solution, you need to enable Delayed Expansion of env variables (type "help setlocal" or "help cmd") so that the var is correctly evaluated in the loop:

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

Also consider the following restriction (MSDN):

The maximum individual environment variable size is 8192bytes.

devio
The restriction is wrong. The maximum environment variable size in Windows is around 64 KiB, so around 32k characters. In batch files, however, you have the problem that the maximum command-line length is 8190 characters, so every environment variable you set there must be shorter. Also, the 65 KiB total environment restriction is bogus. I just created environment variables totalling at a few MiB without problems.
Joey
The link says 65 THOUSAND KB, which would equal 64MB. I won't argue though, since I never dealt with it.
devio