Почему переменная% не работает как!переменная в моем командном файле? - PullRequest
0 голосов
/ 17 апреля 2019

Я использую массив в цикле for и пытаюсь присвоить значение переменной, когда каждый цикл времени обрабатывает значение массива. но когда я присваиваю значение моей переменной, тогда результат не такой, как ожидалось.

Вот что я пытаюсь сделать:

     @echo off
     setlocal enabledelayedexpansion
     SET var[0]=a
     SET var[1]=b
     SET var[2]=c
     SET var[3]=d
     for %%a in (0,1,2,3) do (
     SET name=%var[%%a]%
     ECHO %name%
     )

но результат показывает последнее значение массива 'd'. Я не хочу использовать ECHO !name!. И ожидая выход, как показано ниже с %

 a
 b
 c
 d

1 Ответ

1 голос
/ 11 мая 2019

Обычно показывалось бы 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^!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...