如何从NSIS语言中的字符串中仅获取jre1.8.0_91?
String "C:\Program Files\Java\jre1.8.0_91"
答案 0 :(得分:1)
@Vinod希望您使用的是最新版本的NSIS。此外,包括NSIS(nsh.zip)的最新版本的标头,或包括WordFind功能
!include "WordFunc.nsh"
<。>在.nsi脚本中。
使用它可以使用WordFind函数从文件路径(在您的示例中为C:\ Program Files \ Java \ jre1.8.0_91)中提取文件名(在您的示例中为jre1.8.0_91),如下所示: / p>
${WordFind} "${FilePath}" "\" "-1" $R0
$ R0将包含最后一个&#34;字&#34; (jre1.8.0_91)来自文件路径。
这是通过使用反斜杠(&#34; \&#34;)作为字符串的分隔符,并选择第一个单词,从末尾向后计数(&#34; -1&#34;)来实现的。字符串。
答案 1 :(得分:0)
NSIS中的每个字符串操作都可以使用StrCpy
,StrCmp
和StrLen
进行编码。你可以尝试这样的事情:
!macro PathGetFilename path outvar
Push "${path}"
Call PathGetFilename
Pop ${outvar}
!macroend
Function PathGetFilename
Exch $1
Push $2
Push $3
StrCpy $2 ""
loop:
IntOp $2 $2 - 1
StrCpy $0 $1 1 $2
StrCmp $0 "" done
StrCmp $0 '\' +3
StrCmp $0 '/' +2
Goto loop
IntOp $2 $2 + 1
IntCmp $2 0 "" +2 +2
StrCpy $1 "" ; Ended with slash, return empty string
StrCpy $1 $1 "" $2
done:
Pop $3
Pop $2
Exch $1
FunctionEnd
Section
!insertmacro PathGetFilename "c:\test" $0
DetailPrint |$0|
!insertmacro PathGetFilename "c:\foo/bar" $0
DetailPrint |$0|
!insertmacro PathGetFilename "nameonly" $0
DetailPrint |$0|
!insertmacro PathGetFilename "\endslash\" $0
DetailPrint |$0|
SectionEnd