我正在使用vbscript来自动构建应用程序,并且在构建之前的脚本中我需要更新rc文件中的版本号,我得到了一个带有PRODUCTVERSION和FILEVERSION的.rc文件,我想增加一个这两个值,显示的值 - 0.0.0.0,stil无法找到方法,构建语言是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
答案 0 :(得分:1)
尝试使用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
如果产品和文件版本不相同,则每个版本都需要单独的正则表达式。
修改:仅增加维护号码我建议使用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