2014-03-02 16 views
1

我有一個rc文件,我使用vbscript每增加每晚增量,我增加FILEVERSION和PRODUCTVERSION,但我無法設法增加關鍵字的所有值。 構建與VS2012。通過使用vbscript遞增資源文件中的所有值

這是RC文件:

// 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 (Israel) resources 

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

#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,0,0 
PRODUCTVERSION 3,0,0,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.0.0" 
      VALUE "InternalName", "SHSAppli" 
      VALUE "LegalCopyright", "Copyright (C) 2011" 
      VALUE "OriginalFilename", "SHSAppli.dll" 
      VALUE "ProductName", "SHSAppli Dynamic Link Library" 
      VALUE "ProductVersion", "3.0.0.0" 
     END 
    END 
    BLOCK "VarFileInfo" 
    BEGIN 
     VALUE "Translation", 0x400, 1200 
    END 
END 

#endif // Hebrew (Israel) resources 
///////////////////////////////////////////////////////////////////////////// 



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


///////////////////////////////////////////////////////////////////////////// 
#endif // not APSTUDIO_INVOKED 

,這是腳本:

rcfile = "C:\Build\VS2012Build\SHClientServer\SHSApplicationDLL\SHSApplicationDLL.rc" 

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

Function IncMaint(m, g1, g2, g3, pos, src) 
    IncMaint = g1 & (Int(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 

我也需要增加值 「VALUE 」文件版本「, 」3.0.0.0「 和值」的ProductVersion」,‘3.0.0.0’

感謝您的幫助

回答

1

不知道,如果你真的應該這樣做 - 一不是那些UTF8編碼的.rc文件?但是,如果你必須這樣做,讓第二種模式反映這一事實,即數字之間用「。」分隔。 (點),而不是「;」 (逗號),並小心處理空格。

"(""(?:ProductVersion|FileVersion)"", ""\d+, \d+,)(\d+)(, \d+"")" 
             ^ ^^  ^^ 

更新WRT評論:

固定的第二圖案,並把一個diagostic行成替換功能後,我得到這個輸出爲簡化ASCII編碼文件:

cscript 22130287.vbs 
I'M PLAIN ASCII OR ELSE 

VS_VERSION_INFO VERSIONINFO 
FILEVERSION 3,0,0,0 
PRODUCTVERSION 3,0,0,0 

BEGIN 
    BLOCK "StringFileInfo" 
    BEGIN 
     BLOCK "040004b0" 
     BEGIN 
      VALUE "FileDescription", "SHSAppli Dynamic Link Library" 
      VALUE "FileVersion", "3.0.0.0" 
      VALUE "ProductVersion", "3.0.0.0" 
     END 

----------------- 
*** FILEVERSION 3,0,|0|,0 
*** PRODUCTVERSION 3,0,|0|,0 
*** "FileVersion", "3.0.|0|.0" 
*** "ProductVersion", "3.0.|0|.0" 
I'M PLAIN ASCII OR ELSE 

VS_VERSION_INFO VERSIONINFO 
FILEVERSION 3,0,1,0 
PRODUCTVERSION 3,0,1,0 

BEGIN 
    BLOCK "StringFileInfo" 
    BEGIN 
     BLOCK "040004b0" 
     BEGIN 
      VALUE "FileDescription", "SHSAppli Dynamic Link Library" 
      VALUE "FileVersion", "3.0.1.0" 
      VALUE "ProductVersion", "3.0.1.0" 
     END 

更新II:我使用的腳本:

Option Explicit 

Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject") 
Dim sAll : sAll  = goFS.OpenTextFile("22130287.rc").ReadAll() 
WScript.Echo sAll 
WScript.Echo "-----------------" 

Dim re : Set re = New RegExp 
re.Global = True 
re.IgnoreCase = True 

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

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

WScript.Echo sAll 
WScript.Quit 0 

Function IncMaint(m, g1, g2, g3, pos, src) 
    WScript.Echo "***", Join(Array(g1, g2, g3), "|") 
    IncMaint = g1 & (Int(g2)+1) & g3 
End Function 

更新三:

請看here了。

+0

試過了,仍然不能正常工作 – Newton

+0

@Ekkehard文件的編碼方式應該沒問題吧?一旦他用'OpenTextFile'和'ReadAll'將文件讀入VBScript,它將成爲一個Unicode字符串。而'RegExp'在本地處理Unicode字符串。 – Bond

+1

@Bond - 請參閱http://stackoverflow.com/questions/21396199/vbs-script-attempting-to-write-to-rc-file-returns-error獲取證明它確實重要的證據。 –

相關問題