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

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

最佳答案

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%

关于string - 批处理文件名字符串连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16888762/

10-15 01:51
查看更多