Пакетные переменные Windows - PullRequest
3 голосов
/ 02 марта 2011

У меня проблема с получением значения из переменной двух других переменных. Может показаться сложным, потому что мой английский не самый лучший.

Я использую переменную rXY, чтобы создать сетку xy, где X - x pos, а Y - y pos. Я заполнил сетку случайными символами, но теперь я хочу получить значение одного очка.

echo% r23% будет работать, но если я спрашиваю координаты у пользователя (set / P p_x =), то echo% r% p_x %% p_y %% не будет работать.

Возможно ли получить ценность таким образом?

Пример кода:

echo off
cls
FOR /L %%Y IN (1,1,4) DO (FOR /L %%X IN (1,1,4) DO set r%%X%%Y=.)

echo Y
echo 4 %r14% %r24% %r34% %r44%
echo 3 %r13% %r23% %r33% %r43%
echo 2 %r12% %r22% %r32% %r42%
echo 1 %r11% %r21% %r31% %r41%
echo 0 1 2 3 4 X

set /P input=Please enter X and Y pos:
set p_x=%input:~0,1%
set p_y=%input:~1,2%
echo X=%p_x%
echo Y=%p_y%
echo [2,3]=%r23%

echo %r%p_x%%p_y%
pause

Ответы [ 2 ]

3 голосов
/ 02 марта 2011

Используйте (ужасное) задержанное расширение .

setlocal enabledelayedexpansion
echo !r%p_x%%p_y%!

%variables% раскрыто при разборе строки, !variables! - во время фактического выполнения.

2 голосов
/ 03 марта 2011

Вы можете добиться отложенного расширения по-разному:

CALL ECHO %%r%p_x%%p_y%%%

Чуть менее ужасно, но, по крайней мере, избавляет вас от необходимости давать специальную команду (все же, сомнительное преимущество, если честно).

Как это работает.Двойной % вычисляется как литерал %, затем две переменные оцениваются по их значениям, и, наконец, у вас есть еще один двойной %, который обрабатывается соответственно.

Это первый разбор, которыйпроисходит непосредственно перед выполнением строки.К моменту выполнения строка принимает вид (например) CALL ECHO %r21%.

Как можно догадаться, когда вызывается команда CALL, происходит второй разбор, и на этот раз %r21% жестко оценивается до соответствующего значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...