嵌套的for循环变量批次

问题描述:

这里是我的代码嵌套的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

将@ 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