Nsis 尝试在${ForEachIn}内使用文件时出错?

Nsis 尝试在${ForEachIn}内使用文件时出错?,nsis,Nsis,在NSIS脚本的.onInit函数中有以下代码块 ; Split the supplied artifacts array. nsArray::Split ARTIFACT_ARRAY "${ARTIFACTS}" ";" ${ForEachIn} ARTIFACT_ARRAY $R0 $R1 File ${IVY_ROOT}\"$R1" ${Next} ${ARTIFACTS}是在NSIS编译时从ANT传入的属性,基本上是一个逗号分隔的文件列表。当我试图编译脚本时,我得到

在NSIS脚本的.onInit函数中有以下代码块

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

${ForEachIn} ARTIFACT_ARRAY $R0 $R1  
   File ${IVY_ROOT}\"$R1"
${Next} 
${ARTIFACTS}是在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

欢迎使用任何指针。

您不能在
文件
说明中使用变量,因为变量仅在最终用户系统上计算。插件也是如此。您需要坚持使用${defines}和以
开头的指令在编译时解析时

最好的选择是让您的生成系统使用
文件
指令生成.nsh(如果可能):

Section
SetOutPath $InstDir
!include "generatedfilelist.nsh"
SectionEnd
另一个选项是使用
调用外部工具或批处理文件!系统
,让他们解析列表并生成.nsh


最后,在NSISV3中,可以通过宏递归和
实现这一点!searchparse
+
!searchreplace
但可用的递归深度有限,因此可能无法根据列表中的文件数工作。

文件路径上的引号错误。