0

我正在使用 vbscript 自动构建应用程序,并且在构建之前的脚本期间,我需要更新 rc 文件中的版本号,我得到了一个带有 PRODUCTVERSION 和 FILEVERSION 的 .rc 文件,我想将两者都增加一个这个值,显示的值 - 0.0.0.0,仍然找不到方法,构建语言是 C#,我在 VS2005 和 VS2012 中构建它

// 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
4

1 回答 1

1

尝试使用正则表达式:

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

如果产品和文件版本不同,则需要分别使用单独的正则表达式。

编辑:对于仅增加维护编号,我建议使用替换功能

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
于 2013-11-11T11:41:47.600 回答