2013-11-10 2 views
0

Я использую vbscript для автоматической сборки приложения, а во время сценария перед зданием мне нужно обновить номер версии в файле rc, я получил .rc-файл с a PRODUCTVERSION и FILEVERSION, которые я хочу увеличить одним из этих значений, показаны значения - 0.0.0.0, stil не может найти способ сделать это, язык сборки - C#, я строю его в VS2005 и VS2012Как увеличить значения в файле resourse с помощью vbscript

// Microsoft Visual C++ generated resource script. 
// 
#include "resource.h" 

#define APSTUDIO_READONLY_SYMBOLS 
///////////////////////////////////////////////////////////////////////////// 
// 
// Generated from the TEXTINCLUDE 2 resource. 
// 
#include "afxres.h" 

///////////////////////////////////////////////////////////////////////////// 
#undef APSTUDIO_READONLY_SYMBOLS 

///////////////////////////////////////////////////////////////////////////// 
// Hebrew resources 

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_HEB) 
#ifdef _WIN32 
LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT 
#pragma code_page(1255) 
#endif //_WIN32 

#ifdef APSTUDIO_INVOKED 
///////////////////////////////////////////////////////////////////////////// 
// 
// TEXTINCLUDE 
// 

1 TEXTINCLUDE 
BEGIN 
    "resource.h\0" 
END 

2 TEXTINCLUDE 
BEGIN 
    "#include ""afxres.h""\r\n" 
    "\0" 
END 

3 TEXTINCLUDE 
BEGIN 
    "\r\n" 
    "\0" 
END 

#endif // APSTUDIO_INVOKED 


///////////////////////////////////////////////////////////////////////////// 
// 
// Version 
// 

VS_VERSION_INFO VERSIONINFO 
FILEVERSION 3,0,27,0 
PRODUCTVERSION 3,0,27,0 
FILEFLAGSMASK 0x17L 
#ifdef _DEBUG 
FILEFLAGS 0x1L 
#else 
FILEFLAGS 0x0L 
#endif 
FILEOS 0x4L 
FILETYPE 0x2L 
FILESUBTYPE 0x0L 
BEGIN 
    BLOCK "StringFileInfo" 
    BEGIN 
     BLOCK "040004b0" 
     BEGIN 
      VALUE "FileDescription", "SHSAppli Dynamic Link Library" 
      VALUE "FileVersion", "3, 0, 27, 0" 
      VALUE "InternalName", "SHSAppli" 
      VALUE "LegalCopyright", "Copyright (C) 2011" 
      VALUE "OriginalFilename", "SHSAppli.dll" 
      VALUE "ProductName", "SHSAppli Dynamic Link Library" 
      VALUE "ProductVersion", "3, 0, 27, 0" 
     END 
    END 
    BLOCK "VarFileInfo" 
    BEGIN 
     VALUE "Translation", 0x400, 1200 
    END 
END 

#endif // Hebrew resources 
///////////////////////////////////////////////////////////////////////////// 



#ifndef APSTUDIO_INVOKED 
///////////////////////////////////////////////////////////////////////////// 
// 
// Generated from the TEXTINCLUDE 3 resource. 
// 


///////////////////////////////////////////////////////////////////////////// 
#endif // not APSTUDIO_INVOKED 
+1

просьбы указать язык и построить систему. Было бы полезно получить (короткий) образец файла .rc. –

ответ

1

Try с reglar выражением:

rcfile = "C:\path\to\your.rc" 
major = 3 
minor = 0 
maint = 27 
build = 0 
version = major & "," & minor & "," & maint & "," & build 

Set fso = CreateObject("Scripting.FileSystemObject") 
Set re = New RegExp 
re.Global = True 

rctext = fso.OpenTextFile(rcfile).ReadAll 

re.Pattern = "(PRODUCTVERSION|FILEVERSION) \d+,\d+,\d+,\d+" 
rctext = re.Replace(rctext, "$1 " & version) 

re.Pattern = "(""(ProductVersion|FileVersion)"",) ""\d+, \d+, \d+, \d+""" 
rctext = re.Replace(rctext, "$1 """ & Replace(version, ",", ", ") & """") 

fso.OpenTextFile(rcfile, 2).Write rctext 

Если продукт и версия файла ар e не идентичны, вам нужны отдельные регулярные выражения для каждого.

Edit: Для приращения только номера технического обслуживания я бы рекомендовал использовать replacement function:

rcfile = "C:\path\to\your.rc" 

Set fso = CreateObject("Scripting.FileSystemObject") 
Set re = New RegExp 
re.Global = True 

Function IncMaint(m, g1, g2, g3, pos, src) 
    IncMaint = g1 & (CInt(g2)+1) & g3 
End Function 

rctext = fso.OpenTextFile(rcfile).ReadAll 

re.Pattern = "((?:PRODUCTVERSION|FILEVERSION) \d+,\d+,)(\d+)(,\d+)" 
rctext = re.Replace(rctext, GetRef("IncMaint")) 

re.Pattern = "(""(?:ProductVersion|FileVersion)"", ""\d+, \d+,)(\d+)(, \d+"")" 
rctext = re.Replace(rctext, GetRef("IncMaint")) 

fso.OpenTextFile(rcfile, 2).Write rctext 
+0

Пробовал этот скрипт, но он меняет onlt версию файла, как сделать их автоматически увеличивать на один? – Newton

+0

У меня было что-то другое в виду, когда я начал писать ответ, и забыл добавить 're.Global = True', когда передумал. Исправлена. Что касается auto-incrementing: какой номер именно вы хотите увеличить? –

+0

Мне нужна версия продукта и версия файла до 1 каждый раз, когда я запускаю этот скрипт – Newton

Смежные вопросы