Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - двойное раскрытие

Ответить
Настройки темы
CMD/BAT - двойное раскрытие

Аватара для CyberMuesli

Старожил


Сообщения: 207
Благодарности: 18

Профиль | Отправить PM | Цитировать


Изменения
Автор: CyberMuesli
Дата: 24-06-2012
В переменной VName содержится имя другой переменной окружения. Чтобы получить значение переменной, чье имя содержится в переменной VName, можно использовать такой синтаксис:

set VNAME=FARHOME & rem Но мы этого не знаем
...
set VValue=!%VNAME%!


Как быть, если последнюю строчку надо написать в цикле, в котором %VARNAME% раскроется всего один раз перед циклом. По идее нужно что-то типа такого

Как быть, если последнюю строчку надо написать в цикле или внутри IF, где %VARNAME% раскроется всего один раз перед скобками. По идее нужно что-то типа такого

set VValue=!!VNAME!!

Но так не работает. Как быть?

-------
Кибер Мюсли


Отправлено: 21:51, 24-06-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Где сам пример цикла?

Подобное пробовали?
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sValue=Some value
set sVarName=sValue

echo !%sVarName%!
call echo %%%sVarName%%%

endlocal
exit /b 0

Отправлено: 22:09, 24-06-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для CyberMuesli

Старожил


Сообщения: 207
Благодарности: 18

Профиль | Отправить PM | Цитировать


Цитата Iska:
Где сам пример цикла? »
чуть позже. пока я тренировался, у меня перестало работать даже вне цикла. Что тут не так?

upd: в данном примере все работает, просто & echo надо писать на новой строчке


Код: Выделить весь код
@echo off

setlocal enabledelayedexpansion

call :vtest MyArray
goto :eof

:vTest

set %1.1=value1
set %1.2=value2
set %1.3=value3

set %1.Index=1

set VNAME=%1.!%1.Index!   & echo VNAME=!VNAME!
set VNAME=!%VNAME%!       & echo VNAME=!VNAME!

-------
Кибер Мюсли


Последний раз редактировалось CyberMuesli, 24-06-2012 в 23:26.


Отправлено: 22:29, 24-06-2012 | #3


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Цитата CyberMuesli:
set %1.Index=1 »
Код: Выделить весь код
set "Index=1"
set "VNAME=!%1.%Index%!"
echo %VNAME%

Отправлено: 22:41, 24-06-2012 | #4


Аватара для CyberMuesli

Старожил


Сообщения: 207
Благодарности: 18

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
Код: »
да спасибо, так сработает, но это нарушает условия задачи
в переменной VNAME хранится ИМЯ. В вашем примере оно не хранится, в VNAME сразу попадает нужное значение.
Хотелось бы понять, почему не работает мой пример

-------
Кибер Мюсли


Отправлено: 22:50, 24-06-2012 | #5


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


CyberMuesli,
C промежуточной переменной работает:
Код: Выделить весь код
set "%1.Index=1"
set "Index=!%1.Index!"
echo !%1.%Index%!

Отправлено: 23:14, 24-06-2012 | #6


Аватара для CyberMuesli

Старожил


Сообщения: 207
Благодарности: 18

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
C промежуточной переменной работает: »
вы тоже нарушили условия задачи. у вас нет переменной, в которой хранится имя другой переменной

-------
Кибер Мюсли


Отправлено: 23:16, 24-06-2012 | #7


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Тогда только как говорил Iska, через "call"
Код: Выделить весь код
set %1.Index=1

call set "VNAME=%%%1.!%1.Index!%%"
echo %VNAME%

Отправлено: 23:32, 24-06-2012 | #8


Аватара для CyberMuesli

Старожил


Сообщения: 207
Благодарности: 18

Профиль | Отправить PM | Цитировать


Цитата Iska:
Где сам пример цикла? »
Итак, поясняющий пример. Вместо цикла тут IF (видимо закавыка в том, что скобки, как и в цикле). Первый вариант работает, второй нет.

Код: Выделить весь код
@echo off

setlocal enabledelayedexpansion

call :vtest MyArray
goto :eof

:vTest
set %1.1=value1
set %1.2=value2
set %1.3=value3

set %1.Count=1

   echo Ok:
   set VNAME=%1.!%1.Count!
   echo VNAME=!VNAME!
   set VNAME=!%VNAME%!
   echo VNAME=!VNAME!

if defined %1.!%1.Count! (
   echo does not working
   set VNAME=%1.!%1.Count!
   echo VNAME=!VNAME!
   set VNAME=!%VNAME%!
   echo VNAME=!VNAME!
)

-------
Кибер Мюсли


Отправлено: 23:33, 24-06-2012 | #9


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Код: Выделить весь код
if defined %1.!%1.Count! (
   echo does not working
   call set VNAME=%%%1.!%1.Count!%%
   echo VNAME=!VNAME!
   set VNAME=%VNAME%
   echo VNAME=!VNAME!
)

Отправлено: 23:54, 24-06-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - двойное раскрытие

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
.NET - Программное раскрытие DataGridViewComboBoxCell Delirium Программирование и базы данных 1 28-02-2011 17:55
двойное уменьшение частоты FSB K@kTuS Непонятные проблемы с Железом 2 20-04-2010 06:31
CMD/BAT - [решено] Раскрытие имени файла во вложеном For dARKest Скриптовые языки администрирования Windows 7 17-07-2009 00:15
Основы C++ | Раскрытие цикла while (s--) { ... }; Skrip Программирование и базы данных 3 20-08-2005 20:35
Двойное копирование файла с FTP. :( BlackMonk Хочу все знать 3 13-02-2005 09:08




 
Переход