![]() |
Криво работает сочетание for и set
Есть задача читать настройки из файла и заносить их в переменные
Код:
rem читаем файл и присваиваем переменные Код:
OEM_Manufacturer=System Builder 1. не работает set OEM_URL_File = %USERPROFILE%\Избранное\%OEM_URL_File% OEM_URL_File все равно получается Техническая поддержка производителя.url 2. OEM_URL_File=%USERPROFILE%\Избранное\Техническая поддержка производителя.url %OEM_URL_File% получается %USERPROFILE%\Избранное\Техническая поддержка производителя.url т.е. %USERPROFILE% не раскрывается, например, в C:\Users\Yuri Уже вечер с этим бьюсь и думаю уже переписать скрипты на vbs... |
В блоке кода - тот что в круглых скобках после if defined - осуществляется подстановка переменной OEM_URL_File, значение которой изменяется в самом блоке. Подстановка %OEM_URL_File% всегда подставляет значение переменной ДО входа в команду или блок - т.е. все последующие изменения игнорируются. Выхода два:
1. Присваивать значение до входа в блок или отказаться от блоков вообще: 2. Использовать отложенное раскрытие переменных !OEM_URL_File!: кроме того, в строке: Код:
set OEM_URL_File = %USERPROFILE%\Избранное\%OEM_URL_File% P.S. отсутствие раскрытия %USERPROFILE% не могу подтвердить, в этих примерах всё раскрывается |
Перечитал заголовок и вроде понял о чем речь в п.2.
При подстановке в цикле "set %%I=%%~J" переменные и не должны раскрываться, так как раскрытие переменных производится интерпретатором ДО раскрытия параметров FOR (%%I,%%J), как один из вариантов - использовать "двойное раскрытие" через CALL: Код:
call set %%I=%%~J |
|
Цитата:
|
Время: 23:36. |
Время: 23:36.
© OSzone.net 2001-