Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Несколько вопросов (http://forum.oszone.net/showthread.php?t=231354)

DesmondTruman 27-03-2012 00:04 1887388

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

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

Iska 27-03-2012 01:29 1887419

Цитата:

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
Пока всё) По мере появления, буду задавать здесь. »

Один вопрос — одна тема. Таковы правила. Я ответил здесь только в виде исключения.


Время: 21:40.

Время: 21:40.
© OSzone.net 2001-