嵌套的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
不包含"[----------]"
它应该被设置为一个空字符串。
答
将@ 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
1.在for/f“delims =”%% x'循环之前强制'set“content =”'。 2.您需要启用[延迟扩展](http://ss64.com/nt/delayedexpansion.html),然后使用“if not”!content!“==”[---------- ]“'(注意适当的引用)。强制'echo ON'看看会发生什么... – JosefZ
工作,谢谢! – emilk
@JosefZ如果我想在执行类似操作的else语句中添加一个for循环。我是否需要创建另一个“内容”,如变量或?我是否需要再次启用延迟扩展? – emilk