我正在尝试使用NSIS StrContains命令。
根据Wiki(https://nsis.sourceforge.io/StrContains),其参数如下:
${StrContains} "$result_var" "Needle" "Haystack"
例子如下:
${StrContains} $0 "Dirt" "Dirty deeds done dirt cheap"
但是当我尝试使用此功能时,编译器会向我显示错误:
无效的命令:$ ContainsText
我试图将变量更改为堆栈$ 0,但结果相同。 似乎问题出在参数上,但参数重新排序无济于事。将变量包括在引号中也没有任何作用。
我使用NSIS 3.01,然后更新到最新版本3.04-结果相同。
这是我的测试* .nsi文件:
;Include Modern UI
!include "MUI2.nsh"
; Include for String commands
!include "LogicLib.nsh"
;--------------------------------
;General
;Name and file
Name "Basic Test"
OutFile "Basic.exe"
;Default installation folder
InstallDir "C:\temp"
;Request application privileges
RequestExecutionLevel user
; import functions
!define StrContains
;--------------------------------
;Interface Settings
!define MUI_ABORTWARNING
;--------------------------------
;Pages
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
;--------------------------------
;Languages
!insertmacro MUI_LANGUAGE "English"
;--------------------------------
;Installer Sections
Var ContainsText
Section "Dummy Section" SecDummy
SetOutPath "$INSTDIR"
;set 5 as initial value
StrCpy $ContainsText "5"
MessageBox MB_OK "Initial value: $ContainsText"
; check if inst dir contains 'temp'
; According to https://nsis.sourceforge.io/StrContains
; ${StrContains} "$result_var" "Needle" "Haystack"
${StrContains} $ContainsText $INSTDIR "temp"
MessageBox MB_OK "Cmp result: $ContainsText"
;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
SectionEnd
;--------------------------------
;Uninstaller Section
Section "Uninstall"
Delete "$INSTDIR\Uninstall.exe"
RMDir "$INSTDIR"
SectionEnd
我希望第一个参数是结果变量,第二个-原始字符串,第三个-搜索子字符串。 结果,StrContains变量应为“ test”,但不会编译。
请帮助我了解原因。 预先感谢。
答案 0 :(得分:0)
安德烈。
看起来您的参数顺序错误。另外,将变量更改为$ 0是正确的。
用法是:
import re
list_of_lines = ['Senior Cloud Specialist\nFull-time · Singapore · 5 - 10 Years\n12 days ago', 'Cloud Native Developer\nFull-time · Hyderabad · 2 - 5 Years\n13 days ago']
just_replace = [re.sub('\n',",",lines) for lines in list_of_lines]
replace_then_split_to_list_of_lists = [re.sub('\n',",",lines).split(',') for lines in list_of_lines]
replace_and_then_split_to_flat_list = sum([re.sub('\n',",",lines).split(',') for lines in list_of_lines],[])
no_replace_split_flat_list = sum([lines.split('\n') for lines in list_of_lines],[])
其中${StrContains} "$result_var" "Needle" "Haystack"
= $ 0,"$result_var"
=“ temp”(您正在寻找的针),而"Needle"
= $ INSTDIR(您正在寻找的干草堆)。
所以,而不是:
"Haystack"
尝试一下:
${StrContains} $ContainsText $INSTDIR "temp"
答案 1 :(得分:0)
我最近有同样的问题。
最初,它是在抛出Invalid command: "$0"
。后来我得知一个未定义的${StrContains}
引起了此麻烦。
文档还不清楚,我希望在脚本文件中包含/定义一个StrContains
类文件,该文件应该可以工作。但是到目前为止,没有一个工作。我看到过很老的讨论,其中!include StrContains.nsh
被称为-但这不适用于最新版本的NSIS。
最后对我有用的是从StrContains
documentation页添加完整的“功能代码”。我没想到这一点,从文档中也看不出来。但这对我有用,而且我可以在脚本文件中调用${StrContains}
的方式。