如何使用 vbscript 增加资源文件中的值 [英] How to increment values in resourse file by using vbscript

查看:25
本文介绍了如何使用 vbscript 增加资源文件中的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

i'm using vbscript to automated build of an app, and during the script before the building i need to update version number in a rc file, i got an .rc file with a PRODUCTVERSION and FILEVERSION that i want to incremented by one both of this values, the values are shown - 0.0.0.0, stil can't find a way to do it, build language is C#, i'm building it in VS2005 and 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

推荐答案

尝试使用正则表达式:

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

如果产品和文件版本不相同,您需要为每个单独的正则表达式.

If product and file version are not identical you need separate regular expressions for each.

为了仅增加维护编号,我建议使用替换功能:

For incrementing just the maintenance number I'd recommend using a 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

这篇关于如何使用 vbscript 增加资源文件中的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆