Обычно показывалось бы ECHO is off.
, потому что %name%
не было объявлено ранее.Допустим, вы установили значение по умолчанию null
для %name%
, тогда результат будет null
вместо a
, b
, c
и d
.Это потому, что %name%
было объявлено вне цикла.
Что здесь происходит?echo %name%
внутри блока кода сначала получит переменную %name%
перед ее запуском, и поэтому ваш код внутри блока кода после разбора будет иметь вид:
(
set name=
rem "%var[%" = "" and "%a]%" also = ""
echo
rem %name% wasn't here, because it's parsed before you run it.
)
Символ !
является альтернативной переменнойпре / суффикс, и работает только если вы используете
setlocal EnableDelayedExpansion
Используемая переменная !
будет анализироваться, только когда оператор фактически выполняется вместо анализа:
(
set name=!var[%%a]!
echo !name!
)
На этот разкодовый блок игнорировал бы символ !
и ищет только символ %
, и поскольку цикл for
, %%a
заменит число:
(
set name=!var[0]!
echo !name!
)
(
set name=!var[1]!
echo !name!
)
(
set name=!var[2]!
echo !name!
)
(
set name=!var[3]!
echo !name!
)
В следующий раз, еслиесли вы хотите изменить переменную и использовать ее, вам, возможно, придется использовать !
вместо %
, иначе вы получите повторный результат.И если вы хотите echo
символ !
, вы можете просто избежать его:
echo escaped "^!" symbol^!