批处理文件名字符串连接

时间:2013-06-03 00:56:41

标签: string batch-file filenames string-concatenation

这个问题一直困扰着我好几个小时。我希望有人可以帮助解决一些问题。基本上,我试图扫描文件夹中的所有文件(特定类型)(内部没有子文件夹,所以不必担心这种情况),获取这些文件的名称,并将所有文件连接成一个字符串,例如,如果文件夹有两个文件, a.xml,b.xml和c.xml,我想得到一个类似于

的字符串

-a a.xml -a b.xml -a c.xml

以下是我的代码。

copy *.xml C:\FTP
setLocal Enabledelayedexpansion
set "directory=C:\temp"
set "attachment= "
set "a= -a "
for %%n in (%directory% *.xml) DO ( 
set "attachment=!attachment! %a% %directory%\%%n "
echo.%attachment%
)
setlocal disabledelayedexpansion
echo.%attachment%

输出显示在此图片中http://imgur.com/vpUUe05 我的问题是,首先, for循环中的所有回声都没有打印出来。如那些空行所示。 我想要的最后一个字符串,即。附件,包含

的初始子字符串
-a C:\temp\C:temp. 

这实际上不是文件。我想要的最后一个字符串应该是没有这个子字符串的字符串,只有那个后面的字符串。顺便说一句,如果文件夹中没有文件,我希望字符串“attachment”只是一个空字符串,如“”。谁能帮我?非常感谢!

1 个答案:

答案 0 :(得分:6)

for循环中显示%attachment%的值,以便在每次迭代中不更新该值;你必须使用延迟扩展才能这样做。

for命令中的值集合为:(%directory% *.xml),即值C:\temp和扩展名为.xml的所有文件,我假设在当前目录中为none。之后,您在%a% %directory%\%%n表达式中使用此值,因此结果为-a C:\temp\C:\temp。我认为这里没有意义。

如果您不想要列表中的文件夹值,请不要插入它并在%~NXn可替换参数中使用for修饰符。

以下是正确的代码:

copy *.xml C:\FTP
setLocal Enabledelayedexpansion
set "directory=C:\temp"
set "attachment= "
set "a= -a "
for %%n in ("%directory%\*.xml") DO ( 
set "attachment=!attachment! %a% %%~NXn "
echo.!attachment!
)
setlocal disabledelayedexpansion
echo.%attachment%