|
Компьютерный форум OSzone.net » Серверные продукты Microsoft » Microsoft Windows NT/2000/2003 » Объясните, что может выполнять эта часть кода |
|
Объясните, что может выполнять эта часть кода
|
Старожил Сообщения: 257 |
Профиль | Отправить PM | Цитировать Пытался почитать в мануалах, но так ничего и не понял. Понял только в общих чертах и то- частично :
- первая строка проверяет правильность параметра, и все ошибки то напрявляет их в "дыру" - вторая строка вообще меня приводит в непонятку. - третья : идёт проверка, если установилось не "enabledelayedexpansion", то писать ошибку в %dvderr%. VERIFY parametr 2>nul setlocal enabledelayedexpansion IF ERRORLEVEL 1 (echo %date:~-10% cannot turn on delayedexpansion, run "cmd /v:on" first>>%dvderr% ) & goto :eof ОС windows 2000. |
|
Отправлено: 11:21, 24-09-2007 |
Сообщения: 53441
|
Профиль | Отправить PM | Цитировать |
Отправлено: 11:48, 24-09-2007 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 257
|
Профиль | Отправить PM | Цитировать Это всё хорошо, прочёл на русском про комманду enabledelayedexpansion.
А можно на пальцах объяснить, что оно такое и с чем его едят? Ибо прочтя статью, ты понимаешь, "что параметр enabledelayedexpansion используется до тех пор, пока не встретится endlocal". Да и и пример приведёный в тексте - ничего не объясняет, просто делает проверку удачно ли установился enabledelayedexpansion или нет. Либо я туплю, либо там так написано. |
Отправлено: 12:11, 24-09-2007 | #3 |
Сообщения: 53441
|
Профиль | Отправить PM | Цитировать Пуск -> Выполнить -> Cmd
Наконец, добавлена поддержка связывания времени выполнения для переменных среды окружения. По умолчанию эта поддержка отключена. Ключ /V командной строки CMD.EXE позволяет включать и выключать ее. Для вызова справки, наберите CMD /? Связывание времени выполнения для переменных среды окружения полезно при обходе ограничений раннего связывания, которое происходит при первом чтении текстовой строки, а не при ее выполнении. Следующий пример демонстрирует возникающую проблему при использовании раннего связывания переменных: 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% |
Отправлено: 12:15, 24-09-2007 | #4 |
Старожил Сообщения: 257
|
Профиль | Отправить PM | Цитировать Да мне ясно что выполняет комманда setlocal. Мне неясно что выполняет setlocal enabledelayedexpansion
Если несложно - объясните на пальцах. |
|
Отправлено: 12:38, 24-09-2007 | #5 |
Сообщения: 53441
|
Профиль | Отправить PM | Цитировать skeletor, почитайте предыдущий пост со слов "Наконец, добавлена поддержка связывания времени выполнения". Это оно и есть, EnableDelayedExpansion.
Если попытаюсь на пальцах объяснять, выйдет хуже (менее понятно). |
Отправлено: 12:49, 24-09-2007 | #6 |
Старожил Сообщения: 257
|
Профиль | Отправить PM | Цитировать Спасибо всем, кто помогал. Для таких как я - на пальцах расписано
В обычном случае, чтобы узнать значение переменной окружения, надо воспользоваться конструкцией %переменная%. Однако, если значение переменной меняется внутри цикла и читается там же, то для корректной работы батника, нужно использовать команду setlocal enabledelayedexpansion и вместо символа "%", использовать символ "!". Иначе, значение переменной в цикле будет всегда одним и тем же - таким, каким было до входа в цикл. |
Отправлено: 10:47, 27-09-2007 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Ошибка - [решено] Эта страница имеет изъян в системе безопасности и может быть опасной. | dzh2000 | Microsoft Windows 2000/XP | 2 | 16-11-2009 23:25 | |
Скрыть часть html-кода [как?] | clin | Вебмастеру | 5 | 21-12-2008 10:43 | |
[решено] На что способна эта машинка? | ackerman2007 | Хочу все знать | 9 | 19-06-2008 19:33 | |
что эта за ошибка? | Tosha_l | Общий по FreeBSD | 8 | 25-05-2006 13:16 | |
Что значит эта ошибка | indigo | Microsoft Windows 95/98/Me (архив) | 3 | 04-10-2002 15:02 |
|