Nsis 递归搜索目录中的sql文件(NSI)

Nsis 递归搜索目录中的sql文件(NSI),nsis,Nsis,我对递归搜索有一个问题,但首先是一些关键数据: 我有几个目录,里面装满了我想复制到$TEMP的sql文件 我想从中读取的目录如下v2.1.0.0 目前,必须读取目录v2.5.0.0到v2.7.0.3 文件夹不必是“下一个”,因此v2.5.0.3可以跟随v2.5.0.0 我在用逻辑库 我不熟悉这种语言(在java之前),这是我的第一项任务 我目前正试图用${ForEach}解决这个问题 !macro GetSQLVersionFiles first second third fourth Se

我对递归搜索有一个问题,但首先是一些关键数据:

  • 我有几个目录,里面装满了我想复制到$TEMP的sql文件
  • 我想从中读取的目录如下v2.1.0.0
  • 目前,必须读取目录v2.5.0.0到v2.7.0.3
  • 文件夹不必是“下一个”,因此v2.5.0.3可以跟随v2.5.0.0
  • 我在用逻辑库
  • 我不熟悉这种语言(在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目录

我已经尝试过的事情

  • 引用不带{}的所有参数
  • 编写“${first}${first}9+1”(认为这只会从第一个迭代到第九个)
我得到的错误如下

!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

提前感谢您的帮助:)

您正在混合定义和变量

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

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

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


另一个问题是,您无法使用
文件
指令在最终用户计算机上复制文件,如果您想在运行时复制文件,则需要使用
复制文件
指令。另一方面,如果您想从安装程序中提取文件(根据您的问题,我无法判断您想要哪个)然后,您确实需要使用
文件
指令,但不能使用
${For}
,因为这是一个运行时概念。您可以使用
!system
来混合定义和变量

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

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

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


另一个问题是,您无法使用
文件
指令在最终用户计算机上复制文件,如果您想在运行时复制文件,则需要使用
复制文件
指令。另一方面,如果您想从安装程序中提取文件(根据您的问题,我无法判断您想要哪个)然后您确实需要使用
文件
指令,但不能使用
${For}
因为这是一个运行时概念。您可以使用
!system
来实现这一点,然后
!include

非常感谢!我想做第二个,从安装程序中提取文件。我想我会开始查看批处理,谢谢!非常感谢!我想做第二个,从安装程序中提取文件。我想我会开始的国王进了批,谢谢!