2015-10-07 33 views
0

条件这是我的代码:语法不正确 - 多重如果在for循环

for %%a in (%TESTS%) do (
    IF not "%%a" == "tests/xxxx/yyyy/zzzz/test1" (
    IF not "%%a" == "tests/qqqq/ssss/bbbb/test1892" (
    and so on... 
    ) 
    ) 
) 

如果我有大约一百IF的条件我变得越来越这种错误: “命令的语法是不正确的“ 如果我评论了几条(任何)中频线,则错误不存在。

这段代码有什么问题?

问候。

+0

您应该添加一个错误可重现的示例。您发布的代码没有任何错误。也许真正的代码有一些非转义的特殊符号。如果您试图在循环内多次使用变量,则可能会显示这种无意义的错误,在这种情况下应该使用[延迟扩展](http://ss64.com/nt/delayedexpansion.html)。 – wOxxOm

+3

命令的最大长度为8 KB(约8190个字符)。我建议你以另一种方式执行这些多重测试。例如:将所有搜索字符串插入文件并使用'findstr'。 – Aacini

+0

它与findstr选项一起使用。我已经有了所有搜索字符串的文件,所以我使用这个解决方案。 但是,我从包含搜索短语的文件输出了行。例如: FINDSTR/C: “%%一个” 生成文件 \t \t \t IF错误级别1( \t \t \t \t REM做不便 \t \t \t) 我ouptputs(在控制台): TESTS_LIST + = TEST1 TESTS_LIST + = test1892 在执行脚本之后,这行可能不会出现在输出中吗? –

回答

0

对于命令行/块,最显然你超过了8192个字符的限制。
所以,你可以尝试以下方法:

for %%a in (%TESTS%) do (
    call :SUB "%%~a" 
) 
exit /B 

:SUB 
if "%~1"=="tests/xxxx/yyyy/zzzz/test1" exit /B 
if "%~1"=="tests/qqqq/ssss/bbbb/test1892" exit /B 
rem and so on... 
echo do your action(s) here (done only in NONE of the listed strings match)! 
exit /B 

if语句颠倒,因此不需要嵌套。
由于if行被传输到子例程:SUB,它们不再是过长的for命令行/块的一部分。