2013-07-13 2 views
0

Итак, я начал писать короткий командный файл для проверки отдельной длины строк содержимого файла, но при попытке проверить, эквивалентна ли строка подстрока себе (т.е. это слишком долго), возникает эта ошибка:Вложенная команда IF с подстроками в пакетном файле не работает

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 через некоторое время.

ответ

1

Вам нужно использовать отложенное расширение и переменную! формат, если вы управляете данными внутри цикла.

Возможно, вам будет легче проверить длинные строки.

IF not "!Phrase:~76,1!"=="" echo too long 
+0

Извините, я, должно быть, временно потерял рассудок, когда написал свой удаленный комментарий. – dbenham

+0

чувствую. ТАК ГЛУПО. RGH. –

1

Здесь необходимо delayed expansion, потому что переменные расширяются во время разбора, а не во время выполнения.

setlocal EnableDelayedExpansion 

... 

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

Принял другого парня, потому что вы уже бог среди мужчин. –

Смежные вопросы