1) Я не вижу, где вы определяете, что такое TRUE
и FALSE
- они, безусловно, не являются стандартными пакетными значениями.
Если вы пытаетесь установить переменные, которые функционируют как логические флаги, то я рекомендую следующее.
Чтобы установить флаг в значение false, используйте SET "FLAG="
. Это «не определяет» флаг.
Чтобы установить флаг в значение true, используйте SET "FLAG=1
. Обратите внимание, что значение 1 не имеет значения. Вы можете использовать любое значение, если оно не пустое.
Чтобы проверить, является ли флаг истинным, используйте IF DEFINED FLAG ECHO FLAG IS TRUE
Чтобы проверить, является ли флаг ложным, используйте IF NOT DEFINED FLAG ECHO FLAG IS FALSE
Причина, по которой мне нравится эта техника, в том, что DEFINED оценивается во время выполнения, а не во время разбора. Поэтому этот тест можно безопасно использовать в любом блоке кода, например в цикле FOR, и вам не нужно беспокоиться о задержке расширения.
2) Я не удосужился попытаться проследить вашу логику. Было бы хорошо, если бы вы могли найти минимальный объем кода, который демонстрирует проблему.
3) Если вы использовали ECHO OFF в другом месте, попробуйте включить ECHO ON непосредственно перед IF, чтобы вы могли видеть, что пытается сделать пакетный скрипт.
(я думал, что, возможно, вам не хватает SETLOCAL EnableDelayedExpansion, но теперь я вижу ваш отчет о том, что echo !processed! process
работает.)