2017-09-05 47 views
0

我需要批處理文件的幫助。從.txt文件中拉出文本批處理

我有一個.log文件,其中我搜索一個特定的字符串,但現在我有麻煩在我的下一步,我需要搜索其他字符串,然後獲取「」之間的字符串批量使用它我不是當然,如果這是可行的。

例子:

set findtext="text2find" 
set findfile="text.log" 

findstr %findtext% %findfile% 

if %errorlevel% == 0 (
findstr "Creating Environment " %findfile% 
if %errorlevel% == 0 (
set Environment=[Text from log file] 
) 
) 

日誌文件包含一行: 創建環境 「EnvironmentName」

EnvironmentName是,我需要在批處理文件中使用的字符串。

這可能嗎?

提前感謝您的時間。

+0

是的。你可以使用'FOR/F'命令來解析'FIND'或'FINDSTR'命令的輸出。 – Squashman

+0

在一個塊(括號中的行序列)中,'%anyvariable%'被評估爲變量的初始值,因此在第二個'findstr'之後'%errorlevel%'將被替換爲'0'。這裏的正常解決方案是使用'if not errorlevel 1',這意味着'如果當前錯誤級別不是1也不大於1',因此在正常情況下爲'0'。注意:不涉及'%'。 – Magoo

回答

1
set "environmentname=" 
for /f "tokens=1,2*delims= " %%a in (%findfile%) do (
if /i "%%~a%%~b"=="creatingenvironment" set "environmentname=%%~c" 
) 
if defined environmentname (
echo environment name=%environmentname% 
) else (
echo environment name was not found 
) 

這應該得到您的數據。我假定你已經適當地設置了findfile

for /f「tokenises」它從文件中讀取的每一行。線被解釋爲

定界符 TOKEN1 定界符 token2 定界符 token3 ...

其中該組以下的delims選項=(在這種情況下,空間)的字符被定義爲分隔符。

tokens=...定義將選擇哪些標記。在這種情況下,將選擇令牌1和令牌2以及*,這意味着「指定的最高令牌編號之後的所有內容」,因此令牌3 和其餘行將成爲第三個選擇。

第一選擇將被分配給定義的metavariable,在這種情況下爲%%a。下一個將被分配到%%b等等。這些metavariables區分大小寫。

因此,對於有問題的線路,%%a得到creating%%b得到environment%%c得到"EnvironmentName"

if /i比較不區分大小寫的(這就是爲什麼我沒有理會你已經使用的情況下)。 ~刪除圍繞變量內容的任何引號,因此目標行的%%~a%%~b將爲creatingenvironment。檢測到該行時,分配行的其餘部分 - 將引號(%%~c)包含在變量中。

當該文件已被處理,看是否變量被設置並報告任何內容或尚未設置(這就是爲什麼它被明確設置爲什麼被處理的文件之前。

請注意,我剛剛輸入這個動態,我沒有測試它。可能有錯誤 - 這就是爲什麼用於變量名稱的戰爭與和平是缺點。變量名稱不區分大小寫。

如果文件名包含空格,那麼你需要

for /f "usebackqtokens=1,2*delims= " %%a in ("%findfile%") do (

(這也會爲文件名的工作,沒有空間,當然 - 但引入並不需要在馬上解釋一個額外的元素檢測所需數據的上下文)