批处理文件名字符串连接

Roo*_*kie 3 string filenames batch-file 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%
Run Code Online (Sandbox Code Playgroud)

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

-a C:\temp\C:temp. 
Run Code Online (Sandbox Code Playgroud)

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

Aac*_*ini 6

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

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

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

以下是正确的代码:

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%
Run Code Online (Sandbox Code Playgroud)