
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
13.11.2007, 03:57:52
|
|||
|---|---|---|---|
|
|||
bat-ник для изменения переменной окружения |
|||
|
#18+
Для практических нужд хочу написать bat-ник, который добавит мне в переменную окружения CLASSPATH jar'ы от axis'а. То есть, грубо говоря, хочу сконкатенировать CLASSPATH с некоторыми строками. Для этого создал такой скрипт: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Однако, после исполнения скипта вывод Код: plaintext Сначала я предположил, что скрипт неправильно присваивает CLASSPATH в цикле. Для проверки перед @exit /b 0 вставил вывод этой переменной - все ОК. Она содержит то, что надо. То есть как только скрит завершается, значение переменной возвращается в прежнее состояние. Или другое предположение - значение %CLASSPATH% прочитано при открытии окна консоли и дальше уже не меняется. Но оба эти объяснения не вяжутся с тем, что другой bat-ник работает как надо: Код: plaintext 1. То есть после его исполнения к переменной PATH добавляется еще и строка ";C:\MinGW\bin". Вобщем, я в замешательстве. Как исправить мой bat-ник, чтобы он корректно устанавливал CLASSPATH? (если таковое возможно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.11.2007, 06:12:17
|
|||
|---|---|---|---|
bat-ник для изменения переменной окружения |
|||
|
#18+
Каждый скрипт получает свою ВРЕМЕННУЮ копию переменных окружения. По завершению скрипта эта копия удаляется из памяти. Анализируй это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.11.2007, 06:16:38
|
|||
|---|---|---|---|
bat-ник для изменения переменной окружения |
|||
|
#18+
Ну и SET /? надо бы читать... а то пишет MS пишет... а чукчи не читают. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.11.2007, 06:18:35
|
|||
|---|---|---|---|
bat-ник для изменения переменной окружения |
|||
|
#18+
aleks2Каждый скрипт получает свою ВРЕМЕННУЮ копию переменных окружения. По завершению скрипта эта копия удаляется из памяти. Анализируй это. Поправка: "Каждый скрипт" следует читать "Каждый экземпляр задачи CMD.exe". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.11.2007, 19:20:29
|
|||
|---|---|---|---|
|
|||
bat-ник для изменения переменной окружения |
|||
|
#18+
aleks2 aleks2Каждый скрипт получает свою ВРЕМЕННУЮ копию переменных окружения. По завершению скрипта эта копия удаляется из памяти. Анализируй это. Поправка: "Каждый скрипт" следует читать "Каждый экземпляр задачи CMD.exe". Тогда я не понимаю, почему вот этот скрипт работает правильно: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.11.2007, 15:33:57
|
|||
|---|---|---|---|
bat-ник для изменения переменной окружения |
|||
|
#18+
Тут же по русски написано, а? Ну прочитай... Ну и SET /? надо бы читать... а то пишет MS пишет... а чукчи не читают. ...Связывание времени выполнения для переменных среды окружения полезно при обходеОграничений раннего связывания, которое происходит при первом чтении текстовойстроки, а не при ее выполнении. Следующий пример демонстрирует возникающуюпроблему при использовании раннего связывания переменных: set VAR=before if "%VAR%" == "before" ( set VAR=after; if "%VAR%" == "after" @echo Тело внутреннего оператора сравнения )Данное сообщение не буде выводиться, т.к. %VAR% в ОБОИХ выражениях IFподставляется в момент первого использования в первом IF, в том числе и в телопервого ветвления IF, которое является составным выражением. В IF внутрисоставного выражения в действительности сравниваются значения "before" и"after", что заведомо ложно. Следующий пример подобной ошибки: set LIST= for %i in (*) do set LIST=%LIST% %i echo %LIST%в котором никогда не будет построен список файлов текущей директории. Вместоэтого, значением переменной LIST будет имя последнего найденного файла.И вновь, это случилось потому, что %LIST% подставляется всего один раз -в момент обработки выражения FOR, когда список еще пуст.Фактически приведенный фрагмент эквивалентен следующему: for %i in (*) do set LIST= %iкоторый сохраняет имя последнего найденного файла в переменной LIST.Связывание времени выполнения для переменных среды окружения происходит прииспользовании специального символа (восклицательного знака), обозначающегопроведение сопоставления во время выполнения. Если включена поддержка связываниявремени выполнения, то для достижения ожидаемых результатов приведенные вышефрагменты должны быть переписаны следующим образом: set VAR=before if "%VAR%" == "before" ( set VAR=after if "!VAR!" == "after" @echo Тело внутреннего оператора сравнения ) set LIST= for %i in (*) do set LIST=!LIST! %i echo %LIST%При включенной расширенной обработке команд доступны несколько переменныхсреды, которые не отображаются в списке, отображаемом при вызове команды SET.Значения этих переменных вычисляются динамически каждый раз при их извлечении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=26&mobile=1&tid=1505768]: |
0ms |
get settings: |
5ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
53ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 320ms |

| 0 / 0 |
