|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - двойное раскрытие |
|
CMD/BAT - двойное раскрытие
|
Старожил Сообщения: 207 |
В переменной VName содержится имя другой переменной окружения. Чтобы получить значение переменной, чье имя содержится в переменной VName, можно использовать такой синтаксис:
set VNAME=FARHOME & rem Но мы этого не знаем ... set VValue=!%VNAME%! Как быть, если последнюю строчку надо написать в цикле или внутри IF, где %VARNAME% раскроется всего один раз перед скобками. По идее нужно что-то типа такого set VValue=!!VNAME!! Но так не работает. Как быть? |
|
------- Отправлено: 21:51, 24-06-2012 |
Старожил Сообщения: 207
|
Профиль | Отправить PM | Цитировать Цитата Foreigner:
|
|
------- Отправлено: 23:56, 24-06-2012 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1758
|
Цитата CyberMuesli:
Цитата:
|
||
Отправлено: 23:59, 24-06-2012 | #12 |
Старожил Сообщения: 207
|
Профиль | Отправить PM | Цитировать Цитата Foreigner:
Код: @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! ) if defined %1.!%1.Count! ( echo does not working 2 call set VNAME=%%%1.!%1.Count!%% echo VNAME=!VNAME! set VNAME=%VNAME% echo VNAME=!VNAME! ) C>Test.bat Ok: VNAME=MyArray.1 VNAME=value1 does not working VNAME=MyArray.1 VNAME= does not working 2 VNAME=value1 VNAME= |
|
------- Отправлено: 00:02, 25-06-2012 | #13 |
Ветеран Сообщения: 1758
|
|
Отправлено: 00:07, 25-06-2012 | #14 |
Старожил Сообщения: 207
|
Профиль | Отправить PM | Цитировать Цитата Foreigner:
Пора наверное спать. Все странности с Invalid value понял. В скобки вместо %VARNAME% подставляется то, что было на момент входа в скобки. Так как VNAME уже было правильно вычислено вне скобок, то set VNAME=%VNAME% дает внутри скобок нужный результат, который мы ошибочно интерпретируем как рабочий вариант. Как вычислить то, что нужно, по прежнему, непонятно. Привожу канонический проблемный код. В ветку с IF (в выделенную жирным строчку) надо что-то вставить, что дважды раскроет VNAME, так же, как вне скобок @echo off setlocal enabledelayedexpansion call :vtest MyArray goto :eof :vTest set %1.1=Right value 1 set %1.Index=1 set %1 echo --- Outside brackets is Ok: set VNAME=%1.!%1.Index! echo VNAME=!VNAME! set VNAME=!%VNAME%! echo VNAME=!VNAME! echo --- set VNAME=Invalid value set VNAME if defined %1.!%1.Index! ( echo --- Inside brackets does not working set VNAME=%1.!%1.Index! set VNAME set VNAME=!%VNAME%! set VNAME ) goto :eof |
|
------- Последний раз редактировалось CyberMuesli, 25-06-2012 в 02:38. Отправлено: 00:09, 25-06-2012 | #15 |
Старожил Сообщения: 207
|
Профиль | Отправить PM | Цитировать Всё. Решение найдено. Для двойного раскрытия надо делать так
for %%i in (!VNAME!) do set VNAME=!%%i! Всем спасибо. |
------- Отправлено: 03:02, 25-06-2012 | #16 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата CyberMuesli:
|
|
Отправлено: 03:50, 25-06-2012 | #17 |
Старожил Сообщения: 207
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 03:53, 25-06-2012 | #18 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Ключевые слова — «с этого» и «в первом же».
|
Отправлено: 06:20, 25-06-2012 | #19 |
Ветеран Сообщения: 1758
|
Цитата CyberMuesli:
Цитата:
|
||
Отправлено: 06:50, 25-06-2012 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
.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 |
|