2014-01-06 55 views
0

此刻,我有一個大的文本文件,批處理文件無法處理搜索行。如果該文本文件中的行數不長,則下面的代碼可以搜索值「9200 .... 9300」。 即使這個問題也是這個代碼返回與9200相同的行中的值....我只想裁剪9200的值到9300VBscript搜索文件

但是,無論何時,我將它用於大文本文件(500MB ),它給了奇特的性格。我想我需要VBScript才能找到這個數字,我會在消息中顯示它。

的代碼是

for /f "usebackq delims=* tokens=5" %i in (`findstr "9201.. 9200.." data.mud`) do @echo %I 

謝謝。

+0

可不可以給輸入的實例和期望的輸出?此外,你得到了什麼「奇怪的人物」?輸入文件可能是Unicode編碼還是二進制文件? –

+0

謝謝Ansgar的迴應。它是Unicode拉丁字符。如果您看到Data.mud不是文本文件,但可以在記事本中打開。試圖編寫一個腳本來搜索9200到9200的範圍。如果('findstr「9201..9200 ..」data.mud')中的for/f「usebackq delims = * tokens = 5」%i做@echo – great77

+1

現在我更加困惑。該文件是Unicode(文本)文件嗎?或者它不是一個文本文件(即二進制文件)? 「9201到9200的範圍」是什麼意思?您是否希望腳本輸出兩個字符串「9201」和「9200」之間的所有內容?如果是這樣,9201是否總是在9200之前? –

回答

1

嘗試這樣:

Set fso = CreateObject("Scripting.FileSystemObject") 

Set re = New RegExp 
re.Pattern = "\d+" 
re.Global = True 

filename = "C:\path\to\data.mud" 
lb = 9200 
ub = 920150 

Set f = fso.OpenTextFile(filename) 
Do Until f.AtEndOfStream 
    For Each m In re.Execute(f.ReadLine) 
    n = CLng(m.Value) 
    If n >= lb And n <= ub Then WScript.StdOut.WriteLine n 
    Next 
Loop 
f.Close 

你需要運行該腳本cscript.exe

cscript //NoLogo C:\path\to\your.vbs 
+0

它給出錯誤句柄有效第12行字符33代碼:80070006來源(空)。這是這一行:如果n> = lb並且n <= ub那麼WScript.StdOut.WriteLine n – great77

+2

@ moshaye3 - 使用cscript.exe而不是wscript.exe。 –

+0

非常感謝Ekkehard。它使用cscript工作。 – great77