我遇到了递归搜索的问题,但首先是一些关键数据:
我正在尝试用$ {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目录
我已经尝试过的事情
我得到的错误是
!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
提前感谢您的帮助:)
答案 0 :(得分:2)
您正在混合定义和变量。
使用!define
创建定义,并使用${name}
进行访问。
使用Var
创建变量,并使用$name
进行访问。您还可以使用一些内置变量:$ 0 .. $ 9.
变量可以在运行时更改,定义不能。
另一个问题是您无法使用File
指令复制最终用户计算机上的文件,如果要在运行时复制文件,则需要使用CopyFiles
指令。另一方面,如果你想从安装程序中提取文件(我无法根据你的问题告诉你想要哪个),那么你确实需要使用File
指令,但是你不能使用${For}
,因为它是一个运行时的概念。您可以!system
使用!include
至execute a batch file that builds a list of files in a .nsh,然后req.body
。