NSIS脚本学习:使用 LogicLib.nsh 实现基本流程控制结构

本文详细介绍了如何使用LogicLib.nsh库在NSIS脚本中实现分支结构和循环结构,包括If分支、If与And/Or组合、IfThen、IfCmd、Select多重分支、Switch多重分支、While/Do/DoWhile/DoUntil循环以及For/ForEach循环,并提供了丰富的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LogicLib.nsh

程序的三种基本结构包括:顺序结构、分支结构、循环结构。顺序结构是最基本的结构,本文主要说明了如何在NSIS脚本中写出分支结构和循环结构。

最基本的分支结构和循环结构可以用StrCmp命令和Goto命令组成,但通过这种方式写出的代码可读性极差且难以调试。此时我们就需要用到头文件 LogicLib.nsh 中的功能了。

下面是一个示例程序,在“MyProgram”区域中输入我们要调试的代码:

!define DEBUG_PATH "E:\NSIS_Test\TmpProgram"
!define OUTPUT_PATH "E:\NSIS_Test\Output"
!define INSTALL_PATH "E:\NSIS_Test\Output"

!include LogicLib.nsh

Name "NSIS_VariableConstants_Test"
Caption "NSIS_VariableConstants_Test"

InstallDir ${INSTALL_PATH}

OutFile "Galatea.exe"
Section "My Program"
  SetOutPath ${OUTPUT_PATH}
  File /r "${DEBUG_PATH}\*.*"
  
  ; ----------------- 在这里输入要调试的代码 -----------------
  
SectionEnd

我使用 HM NSIS Edit 2.0.3 工具编辑NSIS脚本,使用编译工具 makensis.exe(版本号2.46) 进行编译。

142758_RwFb_1425762.png

点击 HM NIS Edit 中“NSIS菜单”下的“编译并运行”,即编译nsi文件并运行安装包。

145428_9txS_1425762.png

LogicLib.nsh 中用于逻辑控制的语句,我都逐个写了例子,详见下文。

一、If 分支语句

例1.1:If - ElseIf - Else - EndIf

标准的 If 语句分支结构

var /GLOBAL test1
StrCpy $test1 'a'
${If} $test1 == 'a'
  DetailPrint '$$test1 的值为 a'
${ElseIf} $test1 == 'b'
  DetailPrint '$$test1 的值为 b'
${Else}
  DetailPrint '$$test1 的值为 $test1'
${EndIf}

运行结果:

$test1 的值为 a

例1.2:IfNot - Else - EndIf

IfNot 判断其后的表达式运算结果是否为假,与 If 的判断规则相反

var /GLOBAL test2
StrCpy $test2 'z'
${IfNot} $test2 == 'a'
  DetailPrint '$$test2 的值不为 a'
${Else}
  DetailPrint '$$test2 的值为 $test2'
${EndIf}

运行结果:

$test2 的值不为 a

例1.3:If - ElseIf - ElseIfNot - EndIf

ElseIfNot 判断其后的表达式运算结果是否为假,与 ElseIf 的判断规则相反

var /GLOBAL test3
StrCpy $test3 'b'
${If} $test3 == 'a'
  DetailPrint '$$test3 的值为 a'
${ElseIfNot} $test3 == 'b'
  DetailPrint '$$test3 的值不为 b'
${Else}
  DetailPrint '$$test3 的值为 $test3'
${EndIf}

运行结果:

$test3 的值为 b

例1.4:IfNot & Unless

Unless 与 IfNot 是等价的

var /GLOBAL test4
StrCpy $test4 'z'
${Unless} $test4 == 'a'
  DetailPrint '$$test4 的值不为 a'
${Else}
  DetailPrint '$$test4 的值为 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值