如何使用 vbscript 增加资源文件中的值 [英] How to increment values in resourse file by using 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屋!