2014-12-02 72 views
0

幫助將是偉大的,因爲我是無能爲力。新VB腳本,並創建一個VB腳本會發現有一個通配符名稱的文件,查找中它的模式和複製信息到它creates.But我所得到的另一個文件是一個空白文件VBscripts和通配符

Const ForReading = 1 
Set objRegEx = CreateObject("VBScript.RegExp") 
objRegEx.Pattern = "DETECTION" 

Const ForWriting = 2 

strFolderName = "c:" 
strTargetFile = "C:\race\master.txt" 
strFileNameConstant = "Master" 
strComputer = "." 



objregex.global = true 
objregex.ignorecase = true 
Set objFSO = CreateObject("Scripting.FileSystemObject") 

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set colSubfolders = objWMIService.ExecQuery ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _ 
     & "Where AssocClass = Win32_Subdirectory " & "ResultRole = PartComponent") 

arrFolderPath = Split(strFolderName, "\") 
strNewPath = "" 
For i = 1 to Ubound(arrFolderPath) 
    strNewPath = strNewPath & "\\" & arrFolderPath(i) 
Next 
strPath = strNewPath & "\\" 

Set colFiles = objWMIService.ExecQuery ("Select * from CIM_DataFile where Path = '" & strPath & "'") 

For Each objFile in colFiles 

    If InStr(Lcase(objFile.Name),LCase(strFileNameConstant)) Then 

     Set objFile = objFSO.OpenTextFile(objFile.Name, 1) 
     strSearchString = objFile.ReadAll 
     objFile.Close 
     Set objRegEx = CreateObject("VBScript.RegExp") 
     objRegEx.Global = True 
     objRegEx.Pattern = "DETECTION" 
     strNewText = objRegEx.Replace(strSearchString,VBCrlf & "DETECTION" & VBCrLf) 

    End If 

Next 
'Writes Target file 
Set objFile = objFSO.OpenTextFile(strTargetFile, ForWriting, true) 
objFile.WriteLine(strNewText) 
objFile.Close 

**更新:代碼的功能是讀取一個日誌文件(主文件),該文件有時可以在其名稱中包含通配符(master-123.123.txt)並查找模式(檢測),然後創建另一個文件中包含短語「檢測」的行。它目前所做的是創建文件,但不包括具有「在其中檢測」短語的行。林不知道什麼即時通訊做錯了,因爲我沒有得到任何錯誤和代碼。它創建該文件並能夠找到主文件,即使它具有通配符。

+0

你能解釋一下嗎?沒有得到想法。一些例子會有所幫助 – mhs 2014-12-03 04:42:12

+0

代碼的功能是讀取一個日誌文件(主文件),該文件有時可以在名稱中包含通配符(master-123.123.txt)並查找模式(檢測),然後創建另一個文件中包含短語「檢測」的行。它目前所做的是創建文件,但不包括具有「在其中檢測」短語的行,我不知道爲什麼。 – user3266908 2014-12-03 14:05:03

+0

你的RegEX似乎並不正確。嘗試改變它。我試過這個「。*檢測+。*」 你確定你的腳本找到主文件嗎? – mhs 2014-12-04 01:04:11

回答

0

這裏我做了什麼。請注意,有些零件已經改變。 strFolderName是我們放置主文件的路徑。這段代碼將讀取主文件並獲取出現「檢測」字的行,並將這些行寫入到一個名爲master.txt的新文件中(這就是我從你的問題中得到的)。如果您需要嘗試更改正則表達式。

Const ForReading = 1 
Set objRegEx = CreateObject("VBScript.RegExp") 
objRegEx.Pattern = "DETECTION" 

Const ForWriting = 2 

strFolderName = "D:\Vbs\StackOverflow" 
strTargetFile = "master.txt" 
strFileNameConstant = "Master" 
strComputer = "." 

objregex.global = true 
objregex.ignorecase = true 
Set objFSO = CreateObject("Scripting.FileSystemObject") 

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set colSubfolders = objWMIService.ExecQuery ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _ 
     & "Where AssocClass = Win32_Subdirectory " & "ResultRole = PartComponent") 

arrFolderPath = Split(strFolderName, "\") 
strNewPath = "" 
For i = 1 to Ubound(arrFolderPath) 
    strNewPath = strNewPath & "\\" & arrFolderPath(i) 
Next 
strPath = strNewPath & "\\" 

Set colFiles = objWMIService.ExecQuery ("Select * from CIM_DataFile where Path = '" & strPath & "'") 

For Each objFile in colFiles 
    If InStr(Lcase(objFile.Name),LCase(strFileNameConstant)) Then 

     Set objFile = objFSO.OpenTextFile(objFile.Name, 1) 
     strSearchString = objFile.ReadAll 
     objFile.Close 
     Set objRegEx = CreateObject("VBScript.RegExp") 
     objRegEx.Global = True 
     objRegEx.Pattern = ".*detection+.*" 
     set strNewText = objRegEx.Execute(strSearchString) 
    End If 

Next 
'Writes Target file 
Set objFile = objFSO.OpenTextFile(strTargetFile, ForWriting, true) 
for each maches in strNewText 
objFile.Write maches 
next 
objFile.Close