|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Криво работает сочетание for и set |
|
CMD/BAT - [решено] Криво работает сочетание for и set
|
Компьютерный шаман Сообщения: 2910 |
Есть задача читать настройки из файла и заносить их в переменные
rem читаем файл и присваиваем переменные for /F "eol=; tokens=1,2 delims==" %%I in (settings.ini) do ( if not "%%J"=="" ( set %%I=%%~J set %%I>> prepare.log ) ) rem тут пропущено if defined OEM_URL_File ( echo Add corp shite shortcut to faworites set OEM_URL_File = %USERPROFILE%\Избранное\%OEM_URL_File% echo "%OEM_URL_File%" >> prepare.log echo [DEFAULT] > "%OEM_URL_File%" echo BASEURL=%OEM_Shite% >> "%OEM_URL_File%" echo. >> "%OEM_URL_File%" echo [InternetShortcut] >> "%OEM_URL_File%" echo URL=%OEM_Shite% >> "%OEM_URL_File%" echo IDList= >> "%OEM_URL_File%" echo IconFile=file:///%systemroot%\system32\OOBE\IMAGES\%OEM_Icon%>> "%OEM_URL_File%" echo IconIndex=1 >> "%OEM_URL_File%" ) OEM_Manufacturer=System Builder OEM_Model=PC 2011 OEM_Pfone=X (XXXX) XX-XX-XX OEM_EMail=test@test.ru OEM_Shite=http://test.ru OEM_Logo=oemlogo.bmp OEM_Icon=main.ico OEM_EULA=OEM_EULA.txt ;OEM codepage!!! OEM_URL_File=Техническая поддержка производителя.url 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... |
|
------- Отправлено: 00:32, 30-05-2011 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать В блоке кода - тот что в круглых скобках после if defined - осуществляется подстановка переменной OEM_URL_File, значение которой изменяется в самом блоке. Подстановка %OEM_URL_File% всегда подставляет значение переменной ДО входа в команду или блок - т.е. все последующие изменения игнорируются. Выхода два:
1. Присваивать значение до входа в блок или отказаться от блоков вообще: 2. Использовать отложенное раскрытие переменных !OEM_URL_File!: кроме того, в строке: присваивается значение переменной "OEM_URL_File ", а не "OEM_URL_File" (пробелов быть не должно) P.S. отсутствие раскрытия %USERPROFILE% не могу подтвердить, в этих примерах всё раскрывается |
Отправлено: 04:37, 30-05-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Перечитал заголовок и вроде понял о чем речь в п.2.
При подстановке в цикле "set %%I=%%~J" переменные и не должны раскрываться, так как раскрытие переменных производится интерпретатором ДО раскрытия параметров FOR (%%I,%%J), как один из вариантов - использовать "двойное раскрытие" через CALL: |
Последний раз редактировалось amel27, 30-05-2011 в 07:33. Причина: уточнение Отправлено: 05:04, 30-05-2011 | #3 |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать |
Отправлено: 17:19, 02-06-2011 | #4 |
Компьютерный шаман Сообщения: 2910
|
Профиль | Сайт | Отправить PM | Цитировать Цитата amel27:
|
||
------- Отправлено: 16:37, 16-06-2011 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Драйвер - [решено] Криво работает звук в Win 7 на Audigy SE | alb20 | Поиск драйверов, прошивок и руководств | 1 | 04-05-2010 07:54 | |
Прочие - Web-камера не работает. Ошибка 80004005 cannot set frame rate for preview | Raspytnik | Microsoft Windows 7 | 3 | 17-03-2010 22:41 | |
SoundMAX Integrated Digital HD Audio Криво работает. | Kelor | Непонятные проблемы с Железом | 6 | 02-05-2009 04:39 | |
Решено | не работает сочетание <window>+D,R.. | trotsak | Microsoft Windows 2000/XP | 2 | 29-04-2006 08:17 | |
Firewall IPFW криво работает | kryo | Общий по FreeBSD | 10 | 24-06-2005 13:51 |
|