2017-01-17 1 views
0

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 "Version: $Version" 
SectionEnd 

以前のそれは私のために働くために使用されます。しかし、突然それは動作を停止しました。 ?????と書くのではなく、適切な番号を書いていればうまくいきます。たとえば、次のコードは、私の作品:

Var Version 
Section 
    ${GetFileVersion} "F:\FilesToBeInstalled\MyFile_4.3_runtime_80698_x64.exe" $Version 
    MessageBox MB_OK "Version: $Version" 
SectionEnd 

答えて

1

GetFileVersionは、ファイルのversion-informationを読み込み、それがファイル名を解析しません。以前はうまくいっていた可能性があります。

次の2つの区切り文字の間で検索するWordFind2xを使用することができます。

!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 
+0

ライン '$ {} WordFind2X "MyFile_4.3_runtime_80968.exe" "MyFile_4.3_runtime_" ".EXE" "-1" $ VERSION' 'MyFile_4.3_runtime_80968.exe'広告を使用しています。私の問題は、ファイルの名前に' 80968'があることを前もって知らないことです。 – skm

+0

私は自分の答えを編集し、その名前パターンのすべてのインスタンスを見つけるためにFindFirstを追加しました。命名パターンに従って複数のファイルを除外することができれば、最初のヒットの後にループを壊すことができます。 – idleberg

+0

申し訳ありませんが、 '_x64'も' .exe'の直前のファイル名にもあることを忘れていました。今それは問題を生み出すでしょう。どのようにこの状況に対処できますか? – skm

関連する問題