Batch file &引用;ECHO在这个时候出人意料;在FOR/IF语句期间
下面是一段代码,该代码引发了“ECHO此时意外”错误: 如果满足“%%a==%%b”比较,则引发错误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”中
*注意: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
withtokens=*
不标记字符串,只删除前导分隔符。在标记化的情况下(例如,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%
)
)
)
)