2017-04-19 42 views
0

我在我的NSIS腳本的.onInit函數內有下面的代碼塊。

; Split the supplied artifacts array. 
nsArray::Split ARTIFACT_ARRAY "${ARTIFACTS}" ";" 

${ForEachIn} ARTIFACT_ARRAY $R0 $R1 
    File ${IVY_ROOT}\"$R1" 
${Next} 

的$ {}僞影在NSIS財產上的傳遞距離ANT編譯時間,基本上是一個逗號分隔的文件列表。當我嘗試編譯腳本時,出現下面的錯誤。

[exec] File: "C:\My_Workspaces\WEnDL\\deployments\ivy\"$R1"" -> no files found. 
[exec] Usage: File [/nonfatal] [/a] ([/r] [/x filespec [...]] filespec [...] | 
[exec] /oname=outfile one_file_only) 
[exec] Error in script "C:\My_Workspaces\WEnDL\/deployments/selections.nsis" on line 394 -- aborting creation process 

任何指針讚賞。

+0

文件路徑上的引號是錯誤的。 – Anders

回答

0

您不能在File指令中使用變量,因爲變量僅在最終用戶系統上進行評估。插件也是如此。在編譯時解析時,您需要堅持使用$ {defined}和以!開頭的指令。

最好的辦法是讓你的構建系統生成與File說明如果可能的話.nsh:

Section 
SetOutPath $InstDir 
!include "generatedfilelist.nsh" 
SectionEnd 

另一種方法是調用外部工具或批處理文件與!system,讓他們分析列表,生成.nsh。

最後,在NSIS V3有可能與宏遞歸和!searchparse + !searchreplace但可用的遞歸深度是有限的,所以可能不依賴於文件的清單中的數量攜手退出這個功能。