2015-12-17 117 views
0

所以我对此很困难,我试图解析一个特定值的txt文件并将其添加到一个变量,但只是没有得到它的工作正确我使用下面的代码将批处理值设置为批处理脚本中的变量

for /F "tokens=5 delims= " %%a in ('findstr /I "Short part of line 00:00" test.txt') do set "var1=%%a" 

的问题是,有文本的其他类似的线是改变少量,我包括一个短语时,全部认为是独一无二的,但我不认为命令正在考虑这一点?该文件总是相同的大小,是否有反正写这个在特定的行上找到一个标记并分配给一个变量呢?

编辑:

input.txt 

Process 1     

Primary process Started   2:50:00 
Primary Last part process   3:40:52 
Primary part 3 Balanced   5:01:55 
Primary CMD Backup Completed  5:04:13 
Primary Process Balance Completed 5:04:13 


Process 2  

Secondary process Started   2:50:00 
Secondary Last part process   3:42:08 
Secondary part 3 Balanced   5:06:38 
Secondary CMD Backup Completed  5:08:56 
Secondary Process Balance Completed 5:08:56 

所以,如果我使用命令:

for /F "tokens=5 delims= " %%a in ('findstr /I "Primary process Started" test.txt') do set "var1=%%a" 

我应该回读二点50分00秒,而不是我得到5时08分56秒多数民众赞成奇怪的一个,其余的只是翻转,所以“主要部分3平衡”将让我回到“次部分3平衡”的时间

+0

如果没有输入数据的片段,很难提供帮助。如何张贴您想要匹配的至少一行和现在错误匹配的一行? – zb226

+0

请发布你想要解析的确切的行和你想从中提取的子字符串。 – MichaelS

+0

为了确保我的问题正确:您想要找到以'Primary process Started'开头的行,提取时间(在这种情况下是2:50:00)并将其存储在变量'var1'中? – MichaelS

回答

1

根据您的意见,这应该工作:

@echo off 
setlocal enabledelayedexpansion 
for /f "tokens=*" %%f in (input.txt) do (
    set line=%%f 
    if "!line:~0,23!"=="Primary process Started" (
     for /f "tokens=4" %%t in ("%%f") do set var1=%%t 
     goto BREAK 
    ) 
) 
:BREAK 
echo %var1% 
1

简化@MichaelS代码一点点。

@echo off 
for /f "tokens=1-4 delims= " %%G in (input.txt) do (
    if "%%G %%H %%I"=="Primary process Started" (
     set var1=%%J 
     GOTO BREAK 
    ) 
) 
:BREAK 
echo %var1%