批处理 - 使用findstr读取文件条目,如果它小于变量则输出

时间:2014-08-27 10:35:05

标签: batch-file findstr

我尝试使用findstr读取文本文件,根据值是否小于我预定义的数值,仅输出特定字符。这是我试图阅读的文本文件中的一行:

BW6556 *NULL* 1 6 1406922741 1407046596 1415081796 0 845292618 3 3 5 5 0 8 1024

BW6657 *NULL* 1 6 1408817016 1408817016 1416852216 0 193816666 2 2 5 5 0 0 1024

我需要一个表达式来查看上面的行并执行以下操作:

  1. 查看从第41个字符开始到第50个字符结尾的每一行的长号
  2. 如果该数字大于1且少于我的变量号%expirydate%,则将字符1-7写入新文件。
  3. 在文本文件的每一行都做同样的事情!
  4. 有什么想法吗?

3 个答案:

答案 0 :(得分:1)

使用FINDSTR无法做到这一点。首先,FINDSTR无法在数字上比较数字。其次,FINDSTR不能从一行返回一个子字符串。

可以使用FOR / F解析以空格分隔的值列表。请注意,此解决方案不基于字符位置。

编辑: 主要重写以处理大于2147483647的数字的可能性。另外,如果数字中间有零,我的原始代码会失败< / em>的

此解决方案假设所有行在第7个令牌中都有10位数(位置41)。我将值括在IF比较中的引号中,以强制它进行文本比较而不是数字比较。只要所有值都有10位数,这就可以正常工作。

set "num=0000000000%expirydate%"
set "num=%num:~-10%"
for /f "usebackq tokens=1,7" %%A in ("test.txt") do (
  if "%%C" gtr "0000000001" if "%%C" lss "%expirydate%" (echo %%A )
)

答案 1 :(得分:0)

如果我看一下你的例子并从第一行拿到41到50字符,它就会给我:&#34; 141508179&#34;,但那个字符串长十个字符; &#34; 1415081796&#34;并且它看起来不像约会。

这里有一个VBScript,它提取大于200000000的数字并将它们放在一个新文件中。

Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Temp\input.txt", ForReading)   
Do While objFile.AtEndOfStream <> True
    strLine = objFile.ReadLine
    extractednr = Mid(strLine,41,9)
    If (extractednr > 200000000) Then
        strContents = strContents & extractednr & vbCrLf
    End If
Loop
objFile.Close

Set objFile = objFSO.CreateTextFile("C:\Temp\output.txt", true)
objFile.WriteLine strContents
objFile.Close

答案 2 :(得分:0)

有很多问题..你想要清除BEFORE或AFTER空格后的数字吗?你确定这些是完全结束并开始特征吗?什么可以是数字的最大值?可以超过2147483647 - 最大整数值吗?如果是 - 可以执行字符串比较吗?

@echo off

set /a variable=2147483647
set "val_file=number.txt"
set "new_file=new.txt"

break>"%new_file%"
setlocal enableDelayedExpansion
for /f "useback delims=" %%# in ("%val_file%") do (
    set "line=%%#"
    set line=!line:~40,10!
    set /a number=!line: =!
    rem echo !number! !variable!
    if !number! GTR 1 if !number! LSS !variable! (echo(!number!)>>"%new_file%"

)