我正在尝试复制一堆名称以前缀开头的文件DR__
,但副本必须删除该前缀。那是,DR__foo
必须复制为foo
。我正在尝试这个,它基于文档(.chm)中提供的示例:
<Target Name="CopyAuxiliaryFiles">
<MakeDir Directories="$(TargetDir)Parameters" Condition="!Exists('$(TargetDir)Parameters')" />
<ItemGroup>
<ContextVisionParameterFiles Include="$(SolutionDir)CVParameters\DR__*" />
</ItemGroup>
<Message Text="Files to copy and rename: @(ContextVisionParameterFiles)"/>
<RegexReplace Input="@(ContextVisionParametersFiles)" Expression="DR__" Replacement="">
<Output ItemName ="DestinationFullPath" TaskParameter="Output" />
</RegexReplace>
<Message Text="Renamed Files: @(DestinationFullPath)"/>
<Copy SourceFiles="@(ContextVisionParameterFiles)" DestinationFiles="@(DestinationFullPath)" />
</Target>
DestinationFullPath
出来是空的(或者这就是我在显示它时看到的Message
)。因此,Copy
失败是因为没有DestinationFiles
被指定。这是怎么回事?
Edit:ContextVisionParameterFiles 不为空,它包含以下内容:
D:\SVN.DRA.WorkingCopy\CVParameters\DR__big_bone.alut;D:\SVN.DRA.WorkingCopy\CVParameters\DR__big_medium.gop
它们实际上有 40 个文件,但为了清晰起见我对其进行了修剪
知道了!这似乎是一个愚蠢的错误和一个看似强制的参数的组合。至于第一个,有两个目标,称为CopyAuxiliaryFiles
。至于第二个,好像是Count
需要参数。
最终的工作版本:
<Target Name="CopyCvParameters">
<ItemGroup>
<CvParamFiles Include="$(SolutionDir)CVParameters\DR__*" />
</ItemGroup>
<Message Text="Input:
@(CvParamFiles, '
')"/>
<!-- Replaces first occurance of "foo." with empty string-->
<RegexReplace Input="@(CvParamFiles)" Expression="^.*DR__" Replacement="$(TargetDir)Parameters\" Count="1">
<Output ItemName ="RenamedCvParamFiles" TaskParameter="Output" />
</RegexReplace>
<Message Text="
Output RenamedCvParamFiles:
@(RenamedCvParamFiles, '
')" />
<Copy SourceFiles="@(CvParamFiles)" DestinationFiles="@(RenamedCvParamFiles)" SkipUnchangedFiles="True" />
</Target>
请注意:
- 我重命名了目标来解决名称冲突(为什么 Visual Studio 没有将其检测为错误?)
- 我用以下内容漂亮地打印了 ItemGroups
@(CvParamFiles, '
')
语法,这似乎取代;
有换行符
- 我的正则表达式替换了绝对路径和前缀
-
Count="1"
现在传递给 RegexReplace
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)