每行有一個文件。我認爲這是源文件,目標基目錄是在其他地方指定的?我認爲//
並不重要,但說明它可能是由於粘貼路徑而發生的。
首先,您可以使用ReadLinesFromFile
讀取數據。您將填充每行一個項目的項目列表。所以上手,
<Target Name="mikezcopy">
<ReadLinesFromFile File="files.txt">
<Output TaskParameter="Lines" ItemName="FileItem" />
</ReadLinesFromFile>
⋮
現在我猜測,這些線是相對於源根,你給DEST根也一樣,用命令行復制。每個副本的來源是列表中的一個FileItem
,目標是$(dest)\%(FileItem.Identity)
。這給出了
copy %(FileItem.Identity) $(dest)\%(FileItem.Identity)
這可能與Exec
任務中使用的命令行復制(或XCOPY?),因爲Copy
任務不喜歡你有可用的參數,但CMD.EXE拷貝內在喜歡他們就好。
請注意,我對項目列表中的單個元素使用了語法,因此包含該元素的任務本身將進行批處理。我想你會得到相同的結果有:
⋮
<Exec Command="copy "@(FileItem)" "$(dest)\%(Identity)"" />
也就是說,列表的存在會導致整條生產線進行迭代,並且屬性語法指的是同當前迭代項。我沒有試過這條線,所以它可能不完全正確。使用Message
使用相同的字符串來查看您獲得的內容。
現在,我認爲是dest和源項目關係嗎?如果不是很完美,你需要更精確地表達這種安排,然後以合適的方式對字符串進行變形而不是簡單的連接$(dest)\%(Identity)
。使用.Net CLR System.String函數和內置的[MSBuild]::
屬性函數以及CLR中的其他類可以進行字符串操作,您可以在其中獲取參數以正確傳遞。如果它比這更復雜,則可以使用inline task並在C#或VB中編寫片段。
非常感謝。我寧願保持它在msbuild雖然:) – Menzi 2014-11-05 14:59:04