我有现有的MSBuild代码,但我需要进一步的帮助。
<!--?xml version="1.0" encoding="utf-8"?-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Demo">
<ItemGroup>
<Source1 Include="C:\temp\path01\**\*.txt" /> <!-- \%2A.txt -->
<Target1 Include="C:\temp\path02" />
</ItemGroup>
<Target Name="Demo" BeforeTargets="Build;Rebuild">
<!--<Exec Command="xcopy.exe /C /S /F /R /Y /I /D @(Source1) @(Target1)" />-->
<Copy SourceFiles="@(Source1)" DestinationFiles="@(Source1->'@(Target1)\path02\%(RecursiveDir)%(Filename)%(Extension)')"
SkipUnchangedFiles="true" />
<Message Text="== END ===============================" />
</Target>
</Project>
但似乎@(Target1)无效。它实际上创建了名为@(Target1)的目录,而不是使用Item值。请参阅下面的结果。
创建目录“@(Target1)\ path02”。 将文件从“C:\ temp \ path01 \ 0001.txt”复制到“@(Target1)\ path02 \ 0001.txt”。 将文件从“C:\ temp \ path01 \ 0002.txt”复制到“@(Target1)\ path02 \ 0002.txt”。 创建目录“@(Target1)\ path02 \ sub”。 将文件从“C:\ temp \ path01 \ sub \ sub-0003.txt”复制到“@(Target1)\ path02 \ sub \ sub-0003.txt”。 将文件从“C:\ temp \ path01 \ sub \ sub-0004.txt”复制到“@(Target1)\ path02 \ sub \ sub-0004.txt”。 ==结束===============================
如果可能,我想避免对目标目录进行硬编码 TIA。