2014-01-06 52 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