3

这个问题困扰了我好几个小时。我希望有人可以帮助阐明一些观点。基本上,我试图扫描文件夹中的所有文件(特定类型)(里面没有子文件夹,所以不用担心这种情况),获取这些文件的名称,然后将所有文件连接成一个字符串例如,如果一个文件夹有两个文件,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. 

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

4

1 回答 1

6

在您的for循环中,您会显示 的值%attachment%,因此不会在每次迭代中更新该值;您必须使用延迟扩展来执行此操作。

命令中的值集for是:(%directory% *.xml)即值C:\temp和所有扩展名为 .xml 的文件,我假设在当前目录中没有。之后,你在%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%
于 2013-06-03T01:49:51.013 回答