【问题标题】:syntax of the command is incorrect - multiple if conditions in for loop命令的语法不正确 - for 循环中有多个 if 条件
【发布时间】:2015-10-07 12:28:15
【问题描述】:

这是我的代码:

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 的条件,我就会收到这样的错误: “命令的语法不正确” 如果我注释掉几个(任何) IF 行,则错误不存在。

这段代码有什么问题?

您好。

【问题讨论】:

  • 您应该添加一个错误可重现的示例。您发布的代码没有任何错误。也许真正的代码有一些未转义的特殊符号。如果您尝试在循环内多次使用变量,也可能会显示此类无意义的错误,在这种情况下应使用delayed expansion
  • 命令的最大长度为 8 KB(约 8190 个字符)。我建议您以另一种方式执行这些多重测试。例如:在文件中插入所有搜索字符串并使用findstr
  • 它适用于 findstr 选项。我已经有了包含所有搜索字符串的文件,所以我使用了这个解决方案。但是,我在包含搜索短语的文件的输出中有一行。例如: findstr /c:"%%a" Makefile IF errorlevel 1 ( rem do smth ) 我的输出(在控制台中): TESTS_LIST += test1 TESTS_LIST += test1892 有没有可能这条线不会出现在输出中执行脚本后?

标签: windows batch-file windows-7 scripting


【解决方案1】:

很可能您超出了命令行/块的 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 命令行/块的一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    相关资源
    最近更新 更多