Batch file &引用;ECHO在这个时候出人意料;在FOR/IF语句期间

Batch file &引用;ECHO在这个时候出人意料;在FOR/IF语句期间,batch-file,scripting,echo,batch-processing,Batch File,Scripting,Echo,Batch Processing,下面是一段代码,该代码引发了“ECHO此时意外”错误: 如果满足“%%a==%%b”比较,则引发错误 *注意:enabledelayedexpansion已设置,ECHO已设置为off 也许我遗漏了什么,但是:%b=%SN\u List%,%SN\u List%=%serial%;%a因此,%%b不能等于%%a,除非%serial%为空。@MCND是的,我认为您缺少循环前的SET命令,即“SET snu List=!snu List!;%%a”,因为每个序列号(a)都附加到“snu List”中

下面是一段代码,该代码引发了“ECHO此时意外”错误:

如果满足“%%a==%%b”比较,则引发错误


*注意:enabledelayedexpansion已设置,ECHO已设置为off

也许我遗漏了什么,但是:
%b
=
%SN\u List%
%SN\u List%
=
%serial%;%a
因此,
%%b
不能等于
%%a
,除非
%serial%
为空。@MCND是的,我认为您缺少循环前的SET命令,即“SET snu List=!snu List!;%%a”,因为每个序列号(a)都附加到“snu List”中。还要注意的是,“序列号列表”上的FOR循环将字符串标记化(以“;”作为分隔符),因此序列号列表不等于b(因为b是序列号列表的单个标记)。否,
FOR/f
with
tokens=*
不标记字符串,只删除前导分隔符。在标记化的情况下(例如,
tokens=1-10
),它不做的是迭代标记列表。在字符串上只进行一次传递,每个标记都在一个单独的可替换参数中。我认为对于
FOR/F
tokens=*
有一些误解。我尝试了以下操作:
FOR/F“tokens=*delims=;”%%I IN(“aa;bb;cc;dd;ee”)执行@echo%%I
,但它不解析字符串
“aa;bb;cc;dd;ee”
。这是您希望在代码中发生的吗?我认为问题在于第一行将
%SN\u List\u Filename%
设置为包含空格的值;但是如果不存在,则在
行中没有引用变量。
SET SN_List_Filename=SN_LIST_%DATE:/=%.txt
SET SN_List_Filename_Temp=%SN_List_Filename%.temp

ECHO Date: %DATE:~0,2%-%DATE:~3,2%-%DATE:~-4% > %SN_List_Filename_Temp%
ECHO SN List: >> %SN_List_Filename_Temp%
ECHO. >> %SN_List_Filename_Temp%

IF NOT EXIST %SN_List_Filename% (
    ECHO. > %SN_List_Filename%
) ELSE (

    SET SN_List=%serial%
    SET index=0
    SET snCount=1

    FOR /f "tokens=* skip=5" %%a IN (%SN_List_Filename%) DO (

        SET SN_List=!SN_List!;%%a   
        FOR /F "tokens=* delims=;" %%b IN ("%SN_List%") DO (
            IF %%a==%%b (
                ECHO %%b>> %SN_List_Filename_Temp%
            )
        )
    )
)