1

Тема: CMD/BAT: организация универсальных путей через переменные среды

Наверняка многие из вас сталкивались с проблемами когда после переустановки системы, все 3,4,5 (нужное подчеркнуть) винчестеров перемешивают свои буквы, и старые ярлыки к утилитам уже не пашут. И варанта два: либо новые ярлыки, либо восстанавливать последовательность букв. Здесь прелагается частичное решение, в частности помогающее сделать ярлыки универсальными. Но в прицнипе несложно придумать и более широкое применение, в частности в задачах с портабельностью.
Сам скрипт в батнике, но манипулирует реестром:

cd %CD%\..\..\
SET REGDIR=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
REG ADD "%REGDIR%" /v _mymusic /t REG_SZ /d %CD%

%CD% - полный путь к текущему каталогу (Изначально - это каталог запуска скрипта). Скрипт на 2 уровня вложен в папку моей музыки. Поэтому первой строчкой скрипта выходим на 2 папки вверх, и затем заносим в реестр глобальную переменную _mymusic, тип значения REG_SZ, значение %CD%.
Чтобы получить значение глобальной переменной достаточно ее название заключить в %%.
В итоге, заменив в ярлыке абсолютный путь на относительный, получаем универсальный путь который заработает после переустановки системы и запуска нашего батничка. Например:
Абсолютный путь ("E:\mp3\Король и Шут")
Относительный путь ("%_mymusic%\Король и Шут")
Внимание! Не попадите названием в системные переменные. Большинство из них:

Переменная Тип Описание
%ALLUSERSPROFILE% Локальная Возвращает размещение профиля «All Users».
%APPDATA% Локальная Возвращает используемое по умолчанию размещение данных приложений.
%CD% Локальная Возвращает путь к текущей папке.
%CMDCMDLINE% Локальная Возвращает строку команд, с помощью которой был запущен данный экземпляр Cmd.exe.
%CMDEXTVERSION% Системная Возвращает номер версии текущих расширений обработчика команд.
%COMPUTERNAME% Системная Возвращает имя компьютера.
%COMSPEC% Системная Возвращает путь к исполняемой командной оболочке.
%DATE% Системная Возвращает текущие данные. Использует тот же формат, что и команда date /t. Создается командой Cmd.exe. Дополнительные сведения о команде date см. в разделе Date.
%ERRORLEVEL% Системная Возвращает код ошибки последней использовавшейся команды. Значение, не равное нуля, обычно указывает на наличие ошибки.
%HOMEDRIVE% Системная Возвращает имя диска локальной рабочей станции, связанного с основным каталогом пользователя. Задается на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы».
%HOMEPATH% Системная Возвращает полный путь к основному каталогу пользователя. Задается на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы».
%HOMESHARE% Системная Возвращает сетевой путь к общему основному каталогу пользователя. Задается на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы».
%LOGONSEVER% Локальная Возвращает имя контроллера домена, который проверял подлинность текущей сессии.
%NUMBER_OF_PROCESSORS% Системная Задает количество процессоров, установленных на компьютере.
%OS% Системная Возвращает имя операционной системы. При использовании Windows 2000 имя операционной системы отображается как Windows_NT.
%PATH% Системная Указывает путь поиска для исполняемых файлов.
%PATHEXT% Системная Возвращает список расширений файлов, которые рассматриваются операционной системой как исполняемые.
%PROCESSOR_ARCHITECTURE% Системная Возвращает архитектуру процессора. Значения: x86, IA64.
%PROCESSOR_IDENTFIER% Системная Возвращает описание процессора.
%PROCESSOR_LEVEL% Системная Возвращает номер модели процессора, установленного на компьютере.
%PROCESSOR_REVISION% Системная Возвращает номер модификации процессора.
%PROMPT% Локальная Возвращает параметры командной строки для текущего интерпретатора. Создается командой Cmd.exe.
%RANDOM% Системная Возвращает произвольное десятичное число от 0 до 32767. Создается командой Cmd.exe.
%SYSTEMDRIVE% Системная Возвращает имя диска, содержащего корневой каталог Windows XP (т. е. системный каталог).
%SYSTEMROOT% Системная Возвращает размещение системного каталога Windows XP.
%TEMP% и %TMP% Системная и пользовательская Возвращает временные папки, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему. Некоторые приложения требуют переменную TEMP, другие — переменную TMP.
%TIME% Системная Возвращает текущее время. Использует тот же формат, что и команда time /t. Создается командой Cmd.exe. Дополнительные сведения о команде time см. в разделе Time.
%USERDOMAIN% Локальная Возвращает имя домена, содержащего список учетных записей пользователей.
%USERNAME% Локальная Возвращает имя пользователя, выполнившего вход в систему.
%USERPROFILE% Локальная Возвращает размещение профиля для текущего пользователя.
%WINDIR% Системная Возвращает размещение каталога операционной системы.
Взято с totalweb.ru