2017-02-09 107 views
0

我有递归搜索一个问题,但首先一些关键数据:为SQL文件递归搜索目录中(NSIS)

  • 我有几个目录充满了SQL文件,我想复制到$ TEMP
  • 目录我想从这个样子的v2.1.0.0
  • 的那一刻,目录v2.5.0.0到v2.7.0.3已经被读取
  • 文件夹不必须是“读下一个“所以v2.5.0.3可以跟随v2.5.0.0
  • 我使用LogicLib
  • 我是新来的这门语言(Java之前),这是我的第一个任务

我目前正试图以$ {foreach}的

解决问题
!macro GetSQLVersionFiles first second third fourth 
SetOutPath $TEMP 
${ForEach} ${first} 0 9 + 1 
    ${ForEach} ${second} 0 9 + 1 
     ${ForEach} ${third} 0 9 + 1 
      ${ForEach} ${fourth} 0 9 + 1 
      IfFileExists "scripte\v${first}.${second}.${third}.${fourth}" 0 +2 
      File "scripte\v${first}.${second}.${third}.${fourth}\*.sql" 
      ${next} 
     ${next} 
    ${next} 
${next} 
!macroend 

所以我的想法是,为了使它可行,以后,有一个宏的4个参数,其中可以把起始目录,说所需的“2 5 0 0”,它迭代通过每个文件夹,并提出找到的.sql文件放到$ TEMP目录中

我已经已经尝试过

  • 指的所有参数没有{}
  • 写作“$ {首先} $ {首先} 9 + 1(认为这只会重复从第一个到9)

的错误我得到的是以下

!insertmacro: _ForEach 
Usage: StrCpy $(user_var: output) str [maxlen] [startoffset] 
Error in macro _ForEach on macroline 3 
Error in macro GetSQLVersionFiles on macroline 2 
Error in script "\\NAMEOFMYSCRIPT -- aborting creation process 

第三行中LogicLib的_ForEach是

StrCpy "${_v}" "${_f}"        ; Assign the initial value 

在此先感谢您的帮助:)

回答

2

您正在混合定义和变量。

定义使用!define创建并使用${name}访问。

变量用Var创建,并通过$name访问。还有一些可以使用的内置变量:$ 0 .. $ 9。

变量可以在运行时更改,定义不能。

另一个问题是,您不能使用File指令在最终用户机器上复制文件,如果您想在运行时复制文件,则需要使用CopyFiles指令。另一方面,如果您想从安装程序中提取文件(根据您的问题,我无法确定您想要的文件),那么您需要使用File指令,但不能使用${For},因为它是运行时概念。您可以使用!systemexecute a batch file that builds a list of files in a .nsh,然后您可以使用!include

+0

非常感谢! 我想做第二个,从安装程序中提取文件。 我想我会开始研究批处理,谢谢! –