作为我的安装程序的一部分,我正在提取一个位于不同名称的文件夹中的JRE(即jre1.8.0_74)。我试图用一个模式做到这一点,但它找不到它。我试过这样的事情:
SetOutPath "$INSTDIR\${APPDIR}\jre"
${If} ${RunningX64}
File /nonfatal /a /r "${SrcDir}\jre\jre_64\jre*\*.*"
${Else}
File /nonfatal /a /r "${SrcDir}\jre\jre_32\jre*\*.*"
${EndIf}
但发现没有文件。我基本上想跳过这个“未知”文件夹名称,以便更容易启动我的应用程序等。
我知道这是一个NSIS新手的基本错误:P
有什么想法吗?
答案 0 :(得分:0)
如果在编译时不知道某些内容,则必须使用!system
执行批处理文件或其他能够创建具有所需NSIS指令的文本文件的文件,稍后您可以!include
对于文件系统通配符,您只需使用dir
或for
就可以逃脱:
!macro InvokeNSISCommandOnWildcardFolder parentdir wildcard commandprefix commandsuffix
!tempfile _InvokeNSISCommandOnWildcardFolder
!system 'for /D %A in ("${parentdir}\${wildcard}") do @(^>^> "${_InvokeNSISCommandOnWildcardFolder}" echo ${commandprefix}${parentdir}\%~nxA${commandsuffix})'
!include "${_InvokeNSISCommandOnWildcardFolder}"
!delfile "${_InvokeNSISCommandOnWildcardFolder}"
!undef"${_InvokeNSISCommandOnWildcardFolder}"
!macroend
Section
SetOutPath "$INSTDIR\${APPDIR}\jre"
!insertmacro InvokeNSISCommandOnWildcardFolder "${SrcDir}\jre\jre_32" "jre*" 'File /nonfatal /a /r "' '\*.*"'
SectionEnd
因为我的例子只是使用!system来调用&#34; DOS&#34;命令直接对传递给此宏的字符串有一些限制,<
,>
,(
和)
可能必须进行转义。