【问题标题】:How to rename a part of path in a fileset如何重命名文件集中路径的一部分
【发布时间】:2012-05-02 09:59:07
【问题描述】:

我有一个文件集,我想重命名路径的一部分:

例如:

From
c:\projects\a\dir\subdir\file1.txt
To
c:\projects\b\dir2\subdir\file1.txt

在这种情况下,我想将“a\dir”重命名为“b\dir2”。

我为什么需要这个?我有两个项目目录:a 和 b。我想删除 b 中存在的所有文件(使用 ant)。 Example2 带文件:

c:\projects\a\dir\file1.txt
c:\projects\a\dir\subdir\file2.txt

c:\projects\b\dir\file1.txt
c:\projects\b\dir\subdir\file2.txt
c:\projects\b\dir\file3.txt

在这种情况下,我想从项目 b 中删除 file1.txt 和 subdir/file2.txt(因为项目 a 中只存在这两个)。

获取文件集很容易:

<path id="filesInProjectA">
    <fileset dir="c:\projects\a" includes="**/*.*" />
</path>

我尝试使用&lt;pathconvert.../&gt;,但它对我不起作用...

谢谢: 安德拉斯

【问题讨论】:

    标签: ant


    【解决方案1】:
    <pathconvert property="filePaths" refid="filesInProjectA" pathsep=";">
        <map from="c:\projects\a\dir\" to="c:\projects\a\dir2\" />
    </pathconvert>
    

    这应该可行。这会将所有转换后的路径放入属性 filePaths 中,以“;”分隔。虽然用什么符号分隔路径并不重要,但重要的是要知道它是什么符号,这就是为什么应该指定它。

    之后,您可以使用它对每个转换后的路径执行操作:

    <foreach list="${filePaths}" delimiter=";" target="target-for-each-path" param="path" />
    

    【讨论】:

    • 嗨,尼尔!这工作正常。不过没那么美。有没有办法让结果也是一个文件集?谢谢:安德拉斯
    • 最后我用了这个版本(至少没有调用其他目标,但仍然不是文件集转换...):&lt;for list="${filePaths}" delimiter=";" param="path" parallel="true" threadCount="5"&gt; &lt;sequential&gt; &lt;delete file="@{path}" failonerror="no"/&gt; &lt;/sequential&gt; &lt;/for&gt;
    • @Andras,不幸的是我不知道。可能有办法,但我设法做到这一点的唯一方法就是这样。
    猜你喜欢
    • 2020-06-04
    • 2017-11-06
    • 2020-01-29
    • 1970-01-01
    • 2018-04-18
    • 2017-04-10
    • 2013-01-06
    • 2022-12-04
    • 1970-01-01
    相关资源
    最近更新 更多