2014-01-29 27 views
0

我需要使用BATCH文件從文件中提取信息。我在Windows中安裝了AWK(GNUWIN32)。Windows批處理文件 - 多個條件和行

文本文件包含 -

# FOR Example Purposes *** # 
# Dated on Jan 29, 2014 

TEST_tag=branch_release_v_2.0.82.91_YOU_Branch 
NONE_tag=branch_release_v_12.0.82.1_ONE_Branch 
DOIT_tag=branch_release_v_1.0.9_EXA_Branch 

現在,我需要從該文件下面的輸出(刪除註釋和字符串操作) -

TEST/branch_release_v_2.0.82.91_YOU_Branch 
NONE/branch_release_v_12.0.82.1_ONE_Branch 
DOIT/branch_release_v_1.0.9_EXA_Branch 

,我會更喜歡它是否可以使用變量來實現而不是用「/」替換「_tag =」,所以我可以使用其他格式的邏輯。

在這裏,我試圖做的。

FOR /F "tokens=*" %%A IN ('awk "!/^($|#)/" test.txt') DO (
ECHO %%A | awk -F_ "{print $1}" > one.tmp 
SET /P ONE=<one.tmp 

ECHO %%A | awk -F= "{print $2}" > two.tmp 
SET /P TWO=<two.tmp 

ECHO %ONE%/%TWO% 
) 

它不工作,並打印相同的結果(最後一行只印3次)

DOIT/branch_release_v_1.0.9_EXA_Branch 
DOIT/branch_release_v_1.0.9_EXA_Branch 
DOIT/branch_release_v_1.0.9_EXA_Branch 

解決方案(感謝脫線)---

FOR /F "tokens=*" %%A IN ('awk "!/^($|#)/" test.txt') DO (

setlocal enabledelayedexpansion 

ECHO %%A | awk -F_ "{print $1}" > one.tmp 
SET /P ONE=<one.tmp 

ECHO %%A | awk -F= "{print $2}" > two.tmp 
SET /P TWO=<two.tmp 

ECHO !ONE!/!TWO! 
) 

謝謝再次。

回答

0

在塊語句(a parenthesised series of statements),所述整個塊被解析並然後執行。塊中的任何%var%將在該塊被解析時被該變量的值取代 - 在塊被執行之前。

因此,在遇到IF時,將使用%variables%的值執行IF (something) else (somethingelse)。克服這個

兩種常用方法是:1)使用setlocal enabledelayedexpansion並使用!var!代替%var%訪問的var改變的值或2),以調用一個子程序使用改變的值來執行進一步的處理。