Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата:
1) Часто вижу у некоторых в коде такое начало "setlocal enableextensions" и\или "enabledelayedexpansion", для чего они?
Код: Выделить весь код
setlocal /?
Сама команда «setlocal» применяется для того, чтобы изменения в используемых переменных окружения были локальными, т.е. не затронули переменные окружения родительского контекста:
читать дальше »
Код: Выделить весь код
@echo off

set sValue=Рабы не мы. Мы не рабы.
echo %sValue%

setlocal
echo %sValue%

set sValue=Мама мыла раму
echo %sValue%

endlocal
echo %sValue%

exit /b 0
Цитата:
Код: Выделить весь код
Рабы не мы. Мы не рабы.
Рабы не мы. Мы не рабы.
Мама мыла раму
Рабы не мы. Мы не рабы.

Как Вы видите, после команды «setlocal» переменная окружения «sValue» сохраняет своё значение. Но если ей попытаться присвоить новое значение — появляется новая переменная окружения с тем же именем «sValue», доступная только внутри контекста «setlocal»/«endlocal», а доступ к старой переменной окружения «sValue» теряется.

После использования команды «endlocal» новая переменная окружения «sValue» теряется вместе с контекстом, а доступ к старой переменной окружения «sValue» восстанавливается.

Чаще же всего «setlocal» применяется для использования с параметром «ENABLEDELAYEDEXPANSION» (параметр «ENABLEEXTENSIONS» включён по умолчанию; умолчания можно изменить путём правки реестра или указания параметров при вызове командного процесора), позволяющем использовать отложенное раскрытие переменных. Подробное описание с примером есть в:
Код: Выделить весь код
set /?
Также рекомендую это:
Setlocal - Local variables
EnableDelayedExpansion
Batch files - The SET command: Windows NT 4..Windows 7 Syntax
Batch Files - Variable Expansion in FOR Loops

Цитата DesmondTruman:
2) Как в модуле ftp изменять локальную директорию с помощью системным переменных, к примеру: lcd %systemroot%. »
Никак. «ftp.exe» — это отдельное приложение. Максимум, что Вы можете сделать — использовать сценарий при вызове «ftp.exe», а при создании самого сценария из пакетного файла использовать переменные окружения.

Цитата DesmondTruman:
4) Есть ли команда, которая возвращала имя файла из которого они запущена? (за исключением %~n0). »
Нет.

Цитата DesmondTruman:
Пока всё) По мере появления, буду задавать здесь. »
Один вопрос — одна тема. Таковы правила. Я ответил здесь только в виде исключения.
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:29, 27-03-2012 | #2