Работа с переменными окружения
nnCron умеет задавать и использовать в своей работе переменные окружения (environment variables). По сути, nnCron является полноценным менеджером переменных окружения, причем он может определять т. н. локальные переменные окружения (т. е. переменные, которые доступны только программам, запущенным из nnCron) и системные (глобальные) переменные окружения, доступные всему программному обеспечению вашего компьютера.
Переменные окружения, определенные в кронтабе, никак не зависят от системы - это их главное достоинство. Например, nnCron в NT/2000/XP запускается от имени пользователя SYSTEM, а переменные окружения пользователя SYSTEM могут отличаться от тех, которые заданы для текущего пользователя. Если же переменные заданы прямо в кронтабе, то их никак не затрагивает вышеописанная проблема и их не придется вводить заново при переустановке системы.
Системные переменные окружения, созданные с помощью nnCron, можно использовать в задачах, *.cmd и *.bat файлах, а также любых других программах. Локальные переменные окружения можно использовать в задачах, командных файлах и программах, которые запускаются из nnCron.
Как задавать системные переменные окружения
Системные (глобальные) переменные окружения задаются с помощью слова SYS-SET.
SYS-SET varname=строковое значение до конца строки # или SYS-SET varname="строковое значение"
Вы можете использовать слово SYS-SET в любом месте кронтаба, но обязательно вне рамок описания задачи.
# объявляем переменную окружения SYS-SET PC_NAME=your friendly PC #( pc_hello Time: START-TIME Action: \ выводим сообщение на экран MSG: "This is %PC_NAME%!" )#
Системные переменные окружения служат для хранения статичных, редко изменяющихся значений (таких, как пути к программам, системным каталогам, глобальные макроподстановки). Системная переменная определяется заново при каждом перечитывании кронтаба.
Следует отметить также, что удаление системной переменной окружения из кронтаба не приводит к ее автоматическому удалению из системы. Значения системных переменных окружения хранятся в реестре (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment) и вам следует удалить ставшее ненужным значение вручную или с помощью специального системного апплета System Properties - Advanced - Environment Variables (Win2000/XP).
Как задавать локальные переменные окружения
Локальные переменные окружения задаются с помощью слова SET.
SET varname=строковое значение до конца строки # или SET varname="строковое значение"
Вы можете использовать слово SET в любом месте кронтаба, но обязательно вне рамок описания задачи.
# объявляем переменную окружения SET PC_NAME=your friendly PC #( pc_hello Time: START-TIME Action: \ выводим сообщение на экран MSG: "This is %PC_NAME%!" )#
Локальные переменные окружения гораздо "мобильнее" своих системных (глобальных) коллег. Они перечитываются, т. е. определяются заново перед каждым запуском любой программы из nnCron. Это дает пользователю возможность задавать значения, которые сложно получить используя стандартные средства командного интерпретатора. Например, в качестве переменной окружения можно задать дату, время или како-либо другой изменяющийся параметр:
SET CURTIME=%hh%:%mm% SET CURDATE=%DD%.%MM%.%YY% SET WEEKDAY=%WD%
Как вы видите, nnCron позволяет использовать свои собственные переменные при задании значений для переменных окружения. Это дает возможность задавать даже "динамические" переменные окружения, значения которых будут меняться в зависимости от изменившихся условий.
Например, можно объявить переменную окружения MYHOST, которая будет содержать имя доступного в данное время хоста:
# объявляем переменную окружения SET MYHOST=%MyHost% <% \ создаем новое слово : MyHost \ проверяем доступность первого хоста HOST-EXIST: "HOST1" IF \ первый хост доступен, \ возвращаем его имя S" \\HOST1\DIR1" ELSE \ проверяем доступность второго хоста HOST-EXIST: "HOST2" IF \ второй хост доступен, \ возвращаем его имя S" \\HOST2\DIR2" ELSE \ ни один из хостов недоступен, \ возвращаем пустую строку S" " THEN THEN ; %>
Для этого мы создали новое слово MyHost, которое возвращает имя доступного хоста. Если ни один их указанных хостов недоступен, слово MyHost возвращает пустую строку.
Поскольку переменные окружения, которые объявлены через SET, вычисляются заново при запуске каждого приложения, то запись SET MYHOST=%MyHost% говорит о том, что в момент запуска любого приложения значение переменной окружения MYHOST будет равно результату работы слова MyHost, т. е. пустой строке или имени доступного сейчас хоста.
Имейте ввиду, что значения переменных вычисляются непосредственно при обращении к ним, поэтому не стоит применять такие конструкции:
SET PATH="%PATH%;c:\xxx"
это приведет к разрастанию переменной PATH при каждом к ней обращении.
Дополнительная информация по поводу локальных переменных окружения:
внутри задачи (и в Форт-консоли) значение переменной окружения можно получить при помощи слова ENV ( aname u1 -- aval u2)
S" PATH" ENV TYPE CR
Есть также слово SETENV ( aval u1 aname u2 -- ior )
S" c:\dos;c:\bin" S" PATH" SETENV THROW
Как использовать переменные окружения в задачах
Несмотря на различия в способах определения локальных и системных (глобальных) переменных, в задачах они используются одинаково. Общее правило таково: чтобы получить значение переменной, ее имя достаточно окружить с обоих сторон знаками процента %...%.
Примеры:
\ выводим значение переменной на экран MSG: "WINDIR=%WINDIR%" \ сохраняем значение переменной в файл FILE-WRITE: "c:\temp\test.txt" "%SCITE_HOME%"
Точно таким же образом вы можете использовать в задачах и переменные окружения, заданные не в nnCron, а на системном уровне (например, в autoexec.bat).