NSIS读取文件名中的数字

NSIS读取文件名中的数字,nsis,Nsis,我必须将文件解压缩到NSIS安装程序中的输出文件夹中。文件名包含其版本号。我需要一个方法来读取写在我的文件名中的数字 示例文件名: MyFile_4.3_runtime_80968_x64.exe 我使用以下代码自动读取它: Var Version Section ${GetFileVersion} "F:\FilesToBeInstalled\MyFile_4.3_runtime_?????_x64.exe" $Version MessageBox MB_OK "Versio

我必须将文件解压缩到NSIS安装程序中的输出文件夹中。文件名包含其版本号。我需要一个方法来读取写在我的文件名中的数字

示例文件名:

MyFile_4.3_runtime_80968_x64.exe
我使用以下代码自动读取它:

Var Version
Section
    ${GetFileVersion} "F:\FilesToBeInstalled\MyFile_4.3_runtime_?????_x64.exe" $Version
    MessageBox MB_OK "Version: $Version"
SectionEnd
早些时候,它曾经对我有用。但它突然停止了工作。如果我写正确的数字而不是写
,那么它就可以工作了。例如,以下代码适用于我:

Var Version
Section
    ${GetFileVersion} "F:\FilesToBeInstalled\MyFile_4.3_runtime_80698_x64.exe" $Version
    MessageBox MB_OK "Version: $Version"
SectionEnd
读取文件的名称,但不解析文件名。这很可能是一个巧合,它以前起过作用

您可以使用在两个分隔符之间搜索:

!include "WordFunc.nsh"

Var Version
Var File

Section

    # find instances of MyFile_4.3_runtime*
    FindFirst $0 $File "F:\FilesToBeInstalled\MyFile_4.3_runtime*.exe"
    loop:
      StrCmp $File "" done

      # parse hit for version string
      ${WordFind2X} $File "MyFile_4.3_runtime_" ".exe" "-1" $Version
      DetailPrint "$File contains version $Version"

      FindNext $0 $File
      Goto loop
    done:
    FindClose $0

SectionEnd

行“${WordFind2X}”MyFile_4.3_runtime_80968.exe”“MyFile_4.3_runtime_.exe”“-1“$Version`使用
MyFile_4.3_runtime_80968.exe
ad,这是我的问题,我事先不知道文件名中存在
80968
。我编辑了答案并添加了FindFirst以查找该名称模式的所有实例。如果您可以排除遵循命名模式的多个文件,您可以在第一次点击后中断循环。对不起,我忘了提到,
\u x64
也出现在文件名
.exe
之前。现在这将产生问题。如何处理这种情况?只需将其添加到第二个分隔符,例如
“\u x64.exe”