2016-03-19 3 views
0

Я хочу изменить имя переменной в пакетном файле, так как мне не пришлось бы вводить один и тот же код 24 раза.Изменение имени переменной в коде

Я хотел бы что-то подобное, но это на самом деле работает:

set n=1 
set t=1 

:loop 

set /p %n%%t% = this will be variable %n%%t%: 

echo %%n%%t%% 

set /a n+=1 
set /a t+=1 

goto loop 
+3

'но что на самом деле работает' - так в чем проблема? – npocmaka

+1

Существует так много «реальных» языков сценариев, которые вы можете использовать в Windows - я настоятельно призываю вас * AVOID * использовать файлы .bat, кроме самых простых задач. VBScript и Powershell - это два * гораздо более совершенных * встроенных варианта. IMHO ... – paulsm4

+0

Я предлагаю вам прочитать [Array-связанные-lists-and-other-data-structures-in-cmd-exe-batch-script] (http://stackoverflow.com/questions/10166386/arrays- связанные-листы-и-другие-структуры данных-в-CMD-ех-периодического сценарий/10167990 # 10167990) – Aacini

ответ

1

Две ошибки.

Во-первых, вы указали пробел в заданной переменной, как уже отмечалось.

Во-вторых, вы не можете использовать echo с variablenames, которые начинаются с числового.

Вы можете увидеть переменную с помощью set 1 (например), так что можно было бы использовать что-то вроде for /f "tokens-1*delims==" %%a in ('set 1') do if "%%a"=="1" echo %%b

, например, извлечь значение переменной среды 1

НО - это целая намного проще просто использовать переменные, которые не начинаются с численных значений.

%n где n - 0..9 относится к параметру n к рассматриваемой процедуре.

1

Вы можете использовать массив для этого. Попробуйте это:

set arrayline[%n%][%t%] = this will be variable %n%%t%: 
1

Рассмотрим FOR /L вместо Goto - он будет работать быстрее, и код будет более maintanable.Though вам нужно также delayed expansion

@echo off 
setlocal enableDelayedExpansion 
set n=1 
set t=1 


for /l %%# in (1;1;24) do (

    set /p element[!n!][!t!]= enter the value of element[!n!!t!] : 
    set /a n+=1 
    set /a t+=1 
) 
(echo() 
echo listing elements: 
(echo() 
set element 

endlocal 

виду, что если вы оставили пространство вокруг = когда это вы назначаете значение переменной, пространство станет частью имени переменной.

Смежные вопросы