从具有模式的文件夹中复制文件

时间:2016-03-17 14:39:01

标签: nsis

作为我的安装程序的一部分,我正在提取一个位于不同名称的文件夹中的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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果在编译时不知道某些内容,则必须使用!system执行批处理文件或其他能够创建具有所需NSIS指令的文本文件的文件,稍后您可以!include

对于文件系统通配符,您只需使用dirfor就可以逃脱:

!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;命令直接对传递给此宏的字符串有一些限制,<>()可能必须进行转义。