2010-01-08 196 views
67

我有一个目录,我想用;列出所有.doc文件。如何连接Windows批处理文件中的字符串?

我知道下面的批处理命令回声的所有文件:

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 2011-08-30 14:17:13

43

基于鲁本斯的解决方案,您需要启用ENV变量(键入 “help SETLOCAL” 或 “帮助CMD”)的延迟扩展,使得变种是正确的

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

另外考虑以下限制(MSDN):

在循环评价10

最大个人环境 可变大小是8192字节。

+1

限制是错误的。 Windows中的最大环境变量大小约为64 KiB,因此大约有32k个字符。但是,在批处理文件中,存在最大命令行长度为8190个字符的问题,因此您设置的每个环境变量必须更短。另外,65 KiB的总环境限制是假的。我只是创建了几个MiB的环境变量,没有任何问题。 – Joey 2010-01-09 10:32:25

+2

链接表示65千兆字节,等于64MB。我不会争辩,因为我从来没有处理过它。 – devio 2010-01-09 14:49:24

+1

谢谢你这么多人!你做了我的一天:-) – Julien 2012-04-29 19:17:08

0

请注意,变量@fname@ext可以简单连接。这:

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

重命名所有的PDF文件 “filename_old.pdf”

相关问题