2015-12-02 3 views
0

У меня есть ряд переменных, в которых хранятся строки. Эти переменные имеют номер индекса, который увеличивается с помощью команды FOR.Имя переменной из строки и числа в цикле CMD FOR?

Я хочу перечислить все значения из всех этих переменных, индексы которых генерируются из определения FOR (может быть в следующий раз автоматическим +1 или подобной подфункцией).

setlocal EnableDelayedExpansion 
set dir01a=text 1 
set dir02a=text 2 
set dir03a=text 3 
for %G in (01 02 03) do (echo !dir%Ga!) 

выводит это:

!dir01a! 
!dir02a! 
!dir03a! 

и я хочу это:

text 1 
text 2 
text 3 

я не могу найти какое-либо решение, как позволить эхо рассматривать !dir%Ga! как имя переменной, а не текст вместе ,

Любая идея, пожалуйста?

Если вы используете их в партии, я бы хотел добавить еще один% к% G. Спасибо.

ответ

0

Ваша партия скрипт работает:

@ECHO OFF 
SETLOCAL EnableExtensions EnableDelayedExpansion 
set dir01a=text 1 
set dir02a=text 2 
set dir03a=text 3 
for %%G in (01 02 03) do echo dir%%Ga =to= !dir%%Ga! 

Однако SETLOCAL команда не влияет на текущий cmd экземпляр, вам нужно создать новый, см cmd /? и обновления ниже.

  • командный код SETLOCAL EnableDelayedExpansion и ENDLOCAL;
  • командная строка: соответствующая команда пара CMD /V:ON /K и EXIT соответственно.

Копировать & паста следующий фрагмент кода в открытом окне cmd:

ECHO OFF 
set dir01a=text 1 
set dir02a=text 2 
set dir03a=text 3 
for %G in (01 02 03) do echo dir%Ga =to= !dir%Ga! 
cmd /E:ON /V:ON /C for %G in (01 02 03) do @echo dir%Ga =to= !dir%Ga! 
ECHO ON >NUL 

Выходной:

==> ECHO OFF 
set dir01a=text 1 
set dir02a=text 2 
set dir03a=text 3 
for %G in (01 02 03) do echo dir%Ga =to= !dir%Ga! 
dir01a =to= !dir01a! 
dir02a =to= !dir02a! 
dir03a =to= !dir03a! 
cmd /E:ON /V:ON /C for %G in (01 02 03) do @echo dir%Ga =to= !dir%Ga! 
dir01a =to= text 1 
dir02a =to= text 2 
dir03a =to= text 3 
ECHO ON >NUL 

Update: скопировать & паста следующий фрагмент кода в открытом cmd окне (обратите внимание на подходящий prompt и === команды префикс для лучшего выхода читаемости):

prompt $Q$Q$G$S 
echo OFF 
=== set "var=OLD_value_d" 
=== SETLOCAL EnableDelayedExpansion 
=== set "var=NEW_value_d" & echo default expansion %var% !var! & set var 
=== echo default expansion %var% !var! 
=== ENDLOCAL 
=== echo default expansion %var% !var! 

=== CMD /V:ON /K 
echo OFF 
=== set "var=OLD_value_E" 
=== set "var=NEW_value_E" & echo Delayed expansion %var% !var! & set var 
=== echo Delayed expansion %var% !var! 
=== EXIT 

=== echo default expansion %var% !var! 
=== echo ON >NUL 
prompt 

Выходной:

==> prompt $Q$Q$G$S 

==> echo OFF 
=== set "var=OLD_value_d" 
=== SETLOCAL EnableDelayedExpansion 
=== set "var=NEW_value_d" & echo default expansion %var% !var! & set var 
default expansion OLD_value_d !var! 
var=NEW_value_d 
=== echo default expansion %var% !var! 
default expansion NEW_value_d !var! 
=== ENDLOCAL 
=== echo default expansion %var% !var! 
default expansion NEW_value_d !var! 

=== CMD /V:ON /K 
==> echo OFF 
=== set "var=OLD_value_E" 
=== set "var=NEW_value_E" & echo Delayed expansion %var% !var! & set var 
Delayed expansion OLD_value_E NEW_value_E 
var=NEW_value_E 
=== echo Delayed expansion %var% !var! 
Delayed expansion NEW_value_E NEW_value_E 
=== EXIT 

=== echo default expansion %var% !var! 
default expansion NEW_value_d !var! 
=== echo ON >NUL 

==> prompt 
+0

он работает, когда используется: cmd/E: ON/V: ON/C для %% G in (01 02 03) do @echo! dir %% Ga!- но что делать, когда я хочу запускать больше команд в цикле FOR? (больше команд на более строках, где и другие% переменных% используются для построения сложных путей), техника не работает ... –

+0

Уже обновлено: см. переключатель '/ K'; прочитайте _entire_ 'cmd /?' еще раз, пожалуйста @PeterMaly – JosefZ

+0

спасибо JosefZ после некоторого ворча я создал рабочий скрипт Я возвращался обратно в Мое начало (я был на правильном пути) и магия была простой - добавление двух строк при запуске скрипта: setlocal EnableDelayedExpansion setlocal EnableExtensions - еще один вопрос - где публиковать мой скрипт, чтобы помочь другим? –

0

Лично я хотел бы использовать

for /f "tokens=1*delims==" %%F in ('set dir 2^>nul') do echo %%G 

, где 2^>nul подавляет ошибку или сообщение сгенерировано, если нет заданных переменных, которые начинаются dir

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