任何人都可以帮助我获取 NSIS 脚本吗?我有一个案例,我需要检查案例可以是 3.3 3.42 23.5 23.56w 3.467 999.999 999.99a,但不是 1.b 或 8..a

问题描述 投票:0回答:1

此脚本检查: 版本字符串的长度至少为 3 个字符。 版本字符串不为空。 该版本包含句点。 之前的人物。是数字。 除了最后一个字符之外的所有字符都是数字或句点。 后的最后一个字符。是数字或字母。(数字最后的数字) 如果条件无法解决问题

${If} $sVersion == ""
    MessageBox MB_OK "You can't leave Version blank"
    Abort
${EndIf}
    StrCpy $R1 $sVersion
    Strlen $R2 $R1
    ${If} $R2 < 3
          MessageBox MB_OK "Version must be atleast 3 characters long including a period ."
          Abort
    ${EndIf}
    ${StrContains} $R0 $R1 "."
    ${If} $R0 == -1
             MessageBox MB_OK "Version must contain a digit"
             Abort
    ${EndIf}
    StrCpy $R3 0
    loop:
         StrCpy $R4 $R1 1 $R3
         ${If} $R4 == "."
               Goto checkLastChar
         ${EndIf}
         ${If} $R4 < "0"
               ${OrIf} $R4 > "9"
                       MessageBox MB_OK "All Characters Before the Period . must be a digit"
                       Abort
         ${EndIf}
         IntOp $R3 $R3 + 1
         StrCmp $R3 $R0 loop
    checkLastChar:
          StrCpy $R5 $R1 1 $R2
          ${If} $R5 < "0"
                ${OrIf} $R5 > "9"
          ${AndIf} $R5 < "a"
                ${OrIf} $R5 > "z"
          ${AndIf} $R5 < "A"
                ${OrIf} $R5 > "Z"
                        MessageBox MB_OK "The last character must be a digit or a letter"
                        Abort
          ${EndIf}
    end_loop:

功能结束

plugins scripting nsis modern-ui
1个回答
0
投票

如果您的 $sVersion 只能是有限数量的数字,您可以在 switch 中执行此操作。

${Switch} $sVersion
    ${Case} "3.3"
        MessageBox MB_OK "Version is correct.
        ${Break}
    ${Case} "1.b"
        MessageBox MB_OK "Version is wrong.
        ${Break}
${EndSwitch}

只需以这种方式添加所有可能的情况,并添加关于每种情况应该发生什么的逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.