String 批处理文件名字符串连接

String 批处理文件名字符串连接,string,batch-file,filenames,string-concatenation,String,Batch File,Filenames,String Concatenation,这个问题困扰了我好几个小时。我希望有人能帮我弄清楚。基本上,我尝试扫描文件夹中的所有文件(特定类型)(其中没有子文件夹,因此不必担心这种情况),获取这些文件的名称,并将所有文件连接成一个字符串例如,如果一个文件夹有两个文件, a、 xml,b.xml和c.xml,我想得到一个字符串 -a.xml-a b.xml-a c.xml 下面是我的代码 copy *.xml C:\FTP setLocal Enabledelayedexpansion set "directory=C:\temp" set

这个问题困扰了我好几个小时。我希望有人能帮我弄清楚。基本上,我尝试扫描文件夹中的所有文件(特定类型)(其中没有子文件夹,因此不必担心这种情况),获取这些文件的名称,并将所有文件连接成一个字符串例如,如果一个文件夹有两个文件, a、 xml,b.xml和c.xml,我想得到一个字符串

-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%
输出如图所示 我的问题是首先, for循环中的所有回声都不会打印出任何内容。如那些空行所示。 我想要的最后一个字符串,即附件,包含

-a C:\temp\C:temp. 

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

循环的
中,显示
%attachment%
的值,这样在每次迭代中都不会更新该值;必须使用延迟扩展才能执行此操作

命令的
中的值集是:
(%directory%*.xml)
也就是说,值
C:\temp
和扩展名为.xml的所有文件,我假设它们在当前目录中都没有。然后,在
%a%%directory%%\%n
表达式中使用此值,因此结果是
-a C:\temp\C:\temp
。我认为这没有意义

如果不希望列表中的文件夹值,只需不插入它,并在
for
可替换参数的
中使用
%~NXn
修饰符即可

以下是正确的代码:

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%

嗨,非常感谢你!它起作用了。我可以问一下echo.%附件%和echo.之间的区别吗。!附件还有什么是%%~NXn?批处理文件似乎有这么多的缩写,就像,我真的很模糊。在哪里可以找到这些缩写的列表?非常感谢。