2015-08-21 166 views
1

這裏是我的代碼嵌套的for循環變量批次

set list=test 
del /Q failed_tests.txt 
FOR %%a IN (%list%) DO (
    %%a > output_%%a.txt 

    FINDSTR /C:"[----------]" output_%%a.txt > check_run.txt 

    for /f "delims=" %%x in (check_run.txt) do (
     set content=%%x 
    ) 

    if not %content%=="[----------]" (
     echo Test Does Not Run >> failed_tests.txt 
    ) else (
     echo Test Runs >> failed_tests.txt 
    ) 
) 
type failed_tests.txt 

content似乎總是被設置爲"[----------]"。但是,當output_test.txt/check_run.txt不包含"[----------]"它應該被設置爲一個空字符串。

+2

1.在for/f「delims =」%% x'循環之前強制'set「content =」'。 2.您需要啓用[延遲擴展](http://ss64.com/nt/delayedexpansion.html),然後使用「if not」!content!「==」[---------- ]「'(注意適當的引用)。強制'echo ON'看看會發生什麼... – JosefZ

+0

工作,謝謝! – emilk

+0

@JosefZ如果我想在執行類似操作的else語句中添加一個for循環。我是否需要創建另一個「內容」,如變量或?我是否需要再次啓用延遲擴展? – emilk

回答

1

將@ JosefZ的建議納入答案,所以這顯示爲回答。

SETLOCAL ENABLEDELAYEDEXPANSION 
set list=test 
del /Q failed_tests.txt 
FOR %%a IN (%list%) DO (
    %%a > output_%%a.txt 

    FINDSTR /C:"[----------]" output_%%a.txt > check_run.txt 

    set "content=" 
    for /f "delims=" %%x in (check_run.txt) do (
     set "content=%%x" 
    ) 

    if not "!content!"=="[----------]" (
     echo Test Does Not Run >> failed_tests.txt 
    ) else (
     echo Test Runs >> failed_tests.txt 
    ) 
) 
type failed_tests.txt 

編輯:保留謹慎的雙引號按評論。

+0

「清除變量時不需要雙引號(只需設置content =很好)。」 - 理論上。不幸的是,一些編輯保留了尾隨空格,所以'set content ='可能看起來不錯,但是如果行上有尾隨空格,那些空格將被分配給變量。由於它們在回聲時傾向於不可見,所以它們很難被發現。因此引用的版本 - 這已經成爲SO的常規做法 - 它會再次保護多餘的尾隨空間。 – Magoo