![]() |
двойное раскрытие
В переменной VName содержится имя другой переменной окружения. Чтобы получить значение переменной, чье имя содержится в переменной VName, можно использовать такой синтаксис:
set VNAME=FARHOME & rem Но мы этого не знаем ... set VValue=!%VNAME%! Как быть, если последнюю строчку надо написать в цикле или внутри IF, где %VARNAME% раскроется всего один раз перед скобками. По идее нужно что-то типа такого set VValue=!!VNAME!! Но так не работает. Как быть? |
Где сам пример цикла?
Подобное пробовали? Код:
@echo off |
Цитата:
upd: в данном примере все работает, просто & echo надо писать на новой строчке Код:
@echo off |
Цитата:
Код:
set "Index=1" |
Цитата:
в переменной VNAME хранится ИМЯ. В вашем примере оно не хранится, в VNAME сразу попадает нужное значение. Хотелось бы понять, почему не работает мой пример |
CyberMuesli,
C промежуточной переменной работает: Код:
set "%1.Index=1" |
Цитата:
|
Тогда только как говорил Iska, через "call"
Код:
set %1.Index=1 |
Цитата:
Код:
@echo off |
Код:
if defined %1.!%1.Count! ( |
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Код: Код:
@echo off C>Test.bat Ok: VNAME=MyArray.1 VNAME=value1 does not working VNAME=MyArray.1 VNAME= does not working 2 VNAME=value1 VNAME= |
Код:
if defined %1.!%1.Count! ( Цитата:
|
Цитата:
Пора наверное спать. Все странности с Invalid value понял. В скобки вместо %VARNAME% подставляется то, что было на момент входа в скобки. Так как VNAME уже было правильно вычислено вне скобок, то set VNAME=%VNAME% дает внутри скобок нужный результат, который мы ошибочно интерпретируем как рабочий вариант. Как вычислить то, что нужно, по прежнему, непонятно. Привожу канонический проблемный код. В ветку с IF (в выделенную жирным строчку) надо что-то вставить, что дважды раскроет VNAME, так же, как вне скобок Код:
@echo off |
Всё. Решение найдено. Для двойного раскрытия надо делать так
for %%i in (!VNAME!) do set VNAME=!%%i! Всем спасибо. |
Цитата:
|
|
Ключевые слова — «с этого» и «в первом же».
|
Цитата:
Цитата:
Код:
if defined %1.!%1.Count! ( |
Цитата:
MyArray.1=Right value 1 MyArray.Index=1 --- Outside brackets is Ok: VNAME=MyArray.1 VNAME=Right value 1 --- VNAME=Invalid value --- Inside brackets does not working VNAME=MyArray.1 VNAME=%MyArray.1% Цитата:
|
Цитата:
Вот батник, который берет адрес рабочего стола из реестра, кладет его в DesktopPath (там получается конструкция вида "%USERPROFILE%\Desktop") И все что я хочу, это переместить один файл по адресу из этой переменной, но не работает двойное раскрытие.. Код:
:: Установка portable версии в нужную папку Фотодоказательство
![]() |
А, все, нашел решение.
Надо просто сделать так Код:
call set DesktopPath=%DesktopPath% |
Цитата:
|
Время: 15:06. |
Время: 15:06.
© OSzone.net 2001-