2015-12-17 147 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%