Войти

Показать полную графическую версию : [решено] Несколько вопросов


DesmondTruman
27-03-2012, 00:04
Здравствуйте, помогите пожалуйста в этих вопросах:
1) Часто вижу у некоторых в коде такое начало "setlocal enableextensions" и\или "enabledelayedexpansion", для чего они?
2) Как в модуле ftp изменять локальную директорию с помощью системным переменных, к примеру: lcd %systemroot%.
3) Опять таки, как в модуле ftp изменять локальную директорию, если в пути имеются русские буквы, к примеру: lcd C:\Documents and Settings\admin\Рабочий стол\.
4) Есть ли команда, которая возвращала имя файла из которого они запущена? (за исключением %~n0).

Пока всё) По мере появления, буду задавать здесь.

Iska
27-03-2012, 01:29
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 (http://ss64.com/nt/setlocal.html)
EnableDelayedExpansion (http://ss64.com/nt/delayedexpansion.html)
Batch files - The SET command: Windows NT 4..Windows 7 Syntax (http://www.robvanderwoude.com/ntset.php)
Batch Files - Variable Expansion in FOR Loops (http://www.robvanderwoude.com/variableexpansion.php)

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

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

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




© OSzone.net 2001-2012