虽然可以使用StrCmp
,IntCmp
,IfErrore
,Goto
等命令来执行条件语句和循环语句。然而,还有更简单的方法。
LogicLib
提供了一些非常简单的宏,使得一些复杂结构的构建变得简单。在LogicLib.nsh
中对它的语法进行了解释,与其他的编程语言相似,对初学者和进阶者都很友好。
例如,不使用LogicLib
库,对变量的校验方法
StrCmp $0 'some value' 0 +3
MessageBox MB_OK '$$0 is some value'
Goto done
StrCmp $0 'some other value' 0 +3
MessageBox MB_OK '$$0 is some other value'
Goto done
# else
MessageBox MB_OK '$$0 is "$0"'
done:
使用LogicLib
可以增加代码的可读性,例如:
${If} $0 == 'some value'
MessageBox MB_OK '$$0 is some value'
${ElseIf} $0 == 'some other value'
MessageBox MB_OK '$$0 is some other value'
${Else}
MessageBox MB_OK '$$0 is "$0"'
${EndIf}
也可以使用switch
的方法
${Switch} $0
${Case} 'some value'
MessageBox MB_OK '$$0 is some value'
${Break}
${Case} 'some other value'
MessageBox MB_OK '$$0 is some other value'
${Break}
${Default}
MessageBox MB_OK '$$0 is "$0"'
${Break}
${EndSwitch}
LogicLib
同样支持多条件判断,例如,下面的语句会在$0
和$1
都为空的时候进行提示
${If} $0 == ''
${AndIf} $1 == ''
MessageBox MB_OK|MB_ICONSTOP 'both are empty!'
${EndIf}
LogicLib
不再使用标签和相对跳转,也就不会产生标签冲突,也不用每次脚本变更之后都去手动调整跳转偏移量
通过对while
,do
,for
循环语句的支持,循环也变得更为简单。以下为5次循环的示例。
StrCpy $R1 0
${While} $R1 < 5
IntOp $R1 $R1 + 1
DetailPrint $R1
${EndWhile}
${For} $R1 1 5
DetailPrint $R1
${Next}
StrCpy $R1 0
${Do}
IntOp $R1 $R1 + 1
DetailPrint $R1
${LoopUntil} $R1 >= 5
要使用LogicLib
需要引用头文件:
!include LogicLib.nsh