【问题标题】:Batch file name string concatenation批处理文件名字符串连接
【发布时间】:2013-06-03 00:56:40
【问题描述】:

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

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

【问题讨论】:

    标签: string batch-file filenames string-concatenation


    【解决方案1】:

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

    for 命令中的值集是:(%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.%attachment% 和 echo.!attachment! 有什么区别,还有什么是 %%~NXn ?批处理文件好像有这么多缩写之类的,我真的是一头雾水。在哪里可以找到这些缩写的列表?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    相关资源
    最近更新 更多