Печать значения выражения нескольких переменных в пакетных файлах Windows - PullRequest
1 голос
/ 02 июля 2011

Поэтому я пытаюсь распечатать значение переменной в виде (variable.variable).Я не могу понять, как это сделать.Самое близкое, что я получил, было:

echo %"%Dog.Index%"%

Который только что распечатал:

Dog.Index

А потом я попытался добавить еще один набор тегов% и распечатать:

%""%

Любая помощь будет отличной!Благодарю.

(РЕДАКТИРОВАНИЕ)

Я пытаюсь сделать массивную переменную.Поэтому я хочу распечатать значения Dog.1, Dog.2, Dog.3 и назначить их так:

set Dog.%index%=(Value)

И% index% - это просто счетчик, который я увеличиваю.Попытка "% Dog.index%" не работает, как и% Dog%.% Index%. Спасибо еще раз.

Ответы [ 3 ]

2 голосов
/ 03 июля 2011

Возможно, вам придется использовать отложенное расширение переменных среды. Команда SETLOCAL EnableDelayedExpansion инициализирует режим, после чего вы можете использовать отложенное расширение, заключая переменные в ! вместо %.

Вот иллюстрация того, как его можно использовать:

@ECHO OFF
SETLOCAL EnableDelayedExpansion

ECHO Initialising...
FOR /L %%i IN (1,1,5) DO SET Dog.%%i=!RANDOM!

ECHO Displaying...
FOR /L %%i IN (1,1,5) DO ECHO %%i: !Dog.%%i!

SET index=3
ECHO Dog.%index% is !Dog.%index%!

Выход:

Initialising...
Displaying...
1: 1443
2: 6940
3: 24198
4: 8054
5: 14092
Dog.3 is 24198

Вы можете видеть, что в последней части скрипта используется как немедленное, так и отложенное расширение. Немедленное расширение заменяет %index% на 3 и приводит к имени переменной Dog.3. Затем отложенное расширение заменяет выражение !Dog.3! значением переменной Dog.3.

1 голос
/ 02 июля 2011

Вы ищете что-то вроде этого (в пакетном / cmd-файле - обратите внимание, для этого требуется как минимум XP, IIRC, и расширения команд должны быть включены):

for /l %%i in (1, 1, 10) do set Dog%%i=%%i
for /l %%j in (10, -1, 1) do echo Dog%%j is %%%Dog%%j

(Обратите внимание, что символ, следующий за /, представляет собой строчную букву L).

Для получения дополнительной информации о for (каламбур), см. MSDN TechNet .

Проверено на Win7, кстати. Ваш пробег может варьироваться. :)

1 голос
/ 02 июля 2011
set Dog=(Lassie WonderPup Fido Beethoven)
for %%i in %Dog% do echo %%i
pause
...