2017-01-17 5 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을 읽고, 파일 이름을 구문 분석하지 않습니다. 이전에 효과가 있었을 가능성이 높습니다.

두 구분 기호 사이에 검색 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