2017-01-17 3 views
0

Je dois extraire un fichier dans un dossier de sortie de mon installateur NSIS. Le nom du fichier contient son numéro de version. J'ai besoin d'une méthode pour lire le numéro écrit dans le nom de mon fichier.Lire les numéros au nom d'un fichier par NSIS

Exemple Nom du fichier:

MyFile_4.3_runtime_80968_x64.exe 

J'ai utilisé le code suivant pour lire automatiquement:

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

plus tôt, il travaillait pour moi. Mais soudain, il a cessé de fonctionner. Si j'écris le bon numéro au lieu d'écrire ????? alors ça marche. Par exemple, le code suivant fonctionne pour moi:

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

Répondre

1

GetFileVersion lit le version-information du fichier, il ne parse pas le nom de fichier. Il a probablement été une coïncidence que cela a fonctionné avant.

Vous pouvez utiliser WordFind2x pour rechercher entre deux délimiteurs:

!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

La ligne '$ {} WordFind2X "MyFile_4.3_runtime_80968.exe" "MyFile_4.3_runtime_" ".exe" "-1" $ Version' utilise l'annonce 'MyFile_4.3_runtime_80968.exe' qui est mon problème que je ne sais pas à l'avance que' 80968' est présent dans le nom du fichier. – skm

+0

J'ai modifié ma réponse et ajouté FindFirst pour trouver toutes les instances de ce modèle de nom. Si vous pouvez exclure plusieurs fichiers en suivant le modèle de dénomination, vous pouvez rompre la boucle après le premier hit. – idleberg

+0

Désolé, j'ai oublié de mentionner que le '_x64' est également présent dans le nom du fichier juste avant' .exe'. Maintenant, cela va créer un problème. Comment puis-je faire face à cette situation? – skm