我尝试使用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
我需要一个表达式来查看上面的行并执行以下操作:
有什么想法吗?
答案 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%"
)