=str13 在这个时候是意外的批处理文件

=str13 was unexpected at this time batch file

我只是无法让它工作。 我使用另一种解决方案来确定接收到的参数是否包含某个子字符串。但是每当我不输入第三个参数时它就会失败。我尝试了 4/5 方法来检查它是否存在并在变量内设置搜索条件,但它似乎不起作用!

set str1=%3
if not "%~3"=="" (
    if not x%str1:TEST=%==x%str1% SET additional_config=UNIT_TEST SKIP_WAIT %3
)

如果 %3 不存在,我如何避免计算它以避免错误?

如果 'TEST' 是接收到的第三个参数的一部分,代码应该简单地设置 additional_config。 (如果有第三个参数)

你的问题是if not x%str1:TEST=%甚至if not "%str1:TEST=%"的解析。
这部分被解析了,即使%3为空,问题也来了。

str1 在这种情况下是空的。 empty/undefined 变量的 search/replace 的百分比扩展有意外结果。

在您的情况下,解析器在 %str1: 阶段检测到 str1 未定义并停止百分比扩展。
因此,解析器看到

TEST=%==x%str1% SET additional_config=UNIT_TEST SKIP_WAIT %3
并在成对的百分号处拆分它:

TEST=  %==x%  str1    % SET additional_config=UNIT_TEST SKIP_WAIT %   3

百分号部分无效或未定义变量

TEST= ...   str1 ...   3

此时程序因语法错误而停止,因为块(括号内)包含无效的 IF 语句

如何解决?

一种方法是存储之前的值

set "str1=%~3"
set "contains=%str1:TEST=%"
if not "%~3"=="" (
    if not "%contains%" == "%str1%" SET additional_config=UNIT_TEST SKIP_WAIT %3
)

或者更好的是,使用延迟扩展,这样不会失败

@echo off
setlocal EnableDelayedExpansion
set "str1=%~3"
if not "%~3"=="" (
    if not "!str1:TEST=!" == "!str1!" SET additional_config=UNIT_TEST SKIP_WAIT %3
)