0

好的,我开始编写一个简短的批处理文件来检查文件内容的行的各个长度,但是在尝试检查该行是否等效于自身的子字符串(即它是否太长)时,发生此错误:

76Phrase] was unexpected at this time.

这是正在运行的内容:

IF EXIST file.ini (
    FOR /F "tokens=*" %%p IN (file.ini) DO (
        ...
        SET Phrase=%%p
        ...
        IF [%Phrase:~0,76%] EQU [%Phrase%] (
            ...
        )
    )
)

我试过使用 ( )、" "、' ',什么都没有,而不是 [],但它只会抛出另一个错误。

难道我做错了什么?我已经有一段时间没有真正使用过 cmd 了。

4

2 回答 2

1

您需要在这里延迟扩展,因为%变量是在解析时扩展的,而不是在运行时。

setlocal EnableDelayedExpansion

...

IF EXIST file.ini (
  FOR /F "tokens=*" %%p IN (file.ini) DO (
    ...
    SET "Phrase=%%p"
    ...
    IF [!Phrase:~0,76!] EQU [!Phrase!] (
      ...
    )
  )
)
于 2013-07-13T12:05:38.030 回答
1

您需要使用延迟扩展和 !variable! 如果您在循环内操作数据,请格式化。

您可能会发现这更容易检查长字符串。

IF not "!Phrase:~76,1!"=="" echo too long
于 2013-07-13T12:07:33.303 回答