NSIS - 将文件安装到已存在的不确定子文件夹中?

时间:2015-09-16 13:42:08

标签: installer directory nsis

我正在尝试将文件安装到预先存在的文件夹中,其结构如下:

$APPDATA/somefolder/(uncertainFolder)

“uncertaintyFolder”将是“1.0”或“2.0”。

尽管文件夹名称存在差异,但同一文件将被安装到“uncertaintyFolder”中。我怎样才能做到这一点?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

使用File指令安装的文件将被提取到SetOutPath设置的目录中。一旦知道了所需的文件夹,在运行时更改此路径就不是问题。

如果在编译时已知可能的文件夹名称,则可以使用if /或if / else:

!include LogicLib.nsh
${If} ${FileExists} "$InstDir\SomeFolder\2.0\*.*"
    SetOutPath "$InstDir\SomeFolder\2.0"
${Else}
    SetOutPath "$InstDir\SomeFolder\1.0"
${EndIf}

您还可以在运行时枚举文件和文件夹:

FindFirst $0 $1 "$InstDir\SomeFolder\*.*"
loop:
    StrCmp $1 "" end ; No more files?
    StrCmp $1 "." next ; DOS special name
    StrCmp $1 ".." next ; DOS special name
    IfFileExists "$InstDir\SomeFolder\$1\*.*" 0 next ; Skip files
    DetailPrint "$1 is a folder in $InstDir\SomeFolder"
    SetOutPath "$InstDir\SomeFolder\$1"
    Goto end ; This stops the search at the first folder it finds
next:
    FindNext $0 $1
    goto loop
end:
FindClose $0

FileFunc.nsh中的Locate宏构建在FindFirst / FindNext之上,如果您更喜欢它的语法,也可以使用它...