Ниже приведены некоторые хаки, которые я разработал. Они не элегантны, но могут функционировать в вашей корпоративной среде.
Кажется, что многие приложения используют только HOMEDRIVE / HOMEPATH. В этом случае вы можете создать сценарий запуска, который сопоставляет букву базового диска с вашим локальным путем через путь администратора диска UNC:
set HOME
HOMEDRIVE=G:
HOMEPATH=
HOMESHARE=\ServerUsersusername
net use g: /delete
net use g: \localhostC$Usersusername
HOMEDRIVE Локальный по умолчанию
Если вам вообще не нужен доступ к «Серверу» по имени, вы можете вызвать сбой настройки групповой политики и откат к локальной машине. Самый простой способ сделать это — добавить запись в C:WindowsSystem32driversetchosts, например:
127.0.0.1 Server
После перезагрузки вы должны увидеть что-то вроде:
set HOME
HOMEDRIVE=C:
HOMEPATH=Usersusername
HOMEDRIVE/SHARE с гибридными локальными / удаленными UNC-путями
Если вы хотите получить доступ к «Серверу» по имени для некоторых путей UNC, но переопределить другие локальными путями, я разработал следующую мерзость. Примечание: прямые подключения к серверу по-прежнему будут разрешаться на вашем локальном компьютере. Я рекомендую это решение, только если «Сервер» является только файловым сервером:
-
Измените C:WindowsSystem32driversetchosts, чтобы перенаправить «Сервер» на ваш локальный компьютер:
127.0.0.1 Server
-
Добавьте следующее значение реестра Multi-String в HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsaMSV1_0, чтобы разрешить передачу учетных данных по локальному UNC-пути:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsaMSV1_0 BackConnectionHostNames = Server
-
Создайте фиктивный каталог, который будет служить корнем сервера:
set DUMMY_LOC=C:Server_Dummy mkdir %DUMMY_LOC% cd /D %DUMMY_LOC%
-
Для каждого UNC-пути, который вы хотите направить на реальный Сервер:
rem Alternatively you can use an IP below, but it is more likely to break if DNS changes set SERVER_FQDN=Server.network.blah.com rem Take a look at what's available... net view \%SERVER_FQDN% mklink /D Remote_Example \%SERVER_FQDN%Remote_Example net share Remote_Example=%DUMMY_LOC%Remote_Example /grant:everyone,FULL
-
Для каждого общего ресурса UNC, который вы хотите определить локально (например, Users):
rem The link isn't really necessary for the share, I just find it easier to manage when all of these hacks are in the same directory mklink /D Users C:Users net share Users=%DUMMY_LOC%Users /grant:everyone,FULL
-
перезагружать
Например, это позволило бы разрешить следующие пути UNC:
\ServerRemote_Example => \Server.network.blah.comRemote_Example
\ServerUsers => C:Users
Это разрешение пути должно происходить до сопоставления дисков. Пока пути UNC, связанные с сопоставлениями, действительны (локальные или удаленные), буквы дисков должны вести себя как положено.
Например, в моей настройке следующие переменные принудительно задаются доменом:
set HOME
HOMEDRIVE=G:
HOMEPATH=
HOMESHARE=\ServerUsersusername
Но из-за моих отображений результат:
G: => \ServerUsersusername => C:Usersusername
- Описание
- Просмотр/изменение
- Заключение
Приветствую. Данная заметка расскажет о некоторых системных папках, а также о быстром способе открыть их.
Системные папки, символ % означает что это переменные, другими словами — доступ в папку возможен без указания полного пути к ней.
- %HOMEDRIVE% — данная переменная открывает корень системного диска, куда установлена операционная система. Чаще всего это системный диск C:
- %HOMEPATH% — переменная открывает пользовательскую папку пользователя, например у меня это C:UsersDima (Dima — название учетной записи).
Открыть данные папки можно из командной строки, достаточно просто вставить команду и нажать энтер:
Также можно зажать клавиши Win + R, в окошко Выполнить вставить команду:
Можно просто открыть проводник, любую папку и вверху в поле адреса вставить команду, нажать энтер, эффект будет такой же:
Простыми словами, переменные — это команды, которые привязаны к открытию определенных папок. Например есть переменная %TEMP%, которая открывает временную директорию Windows (часто ее использует разный софт при инсталляции).
Как посмотреть/изменить переменные?
Рассмотрим способ, который актуален для операционки Windows 10, для других — действия аналогичны.
- Зажмите Win + R, появится окошко Выполнить, вставьте команду systempropertiesadvanced, нажмите ОК.
- Откроется окошко Свойства системы, здесь на вкладке Дополнительно нажмите кнопку Переменные среды.
- Отобразится окно, где будут указаны пользовательские и системные переменные. Каждую из них — можно изменить, достаточно выбрать > нажать кнопку Изменить. Однако делать это не рекомендуется, ведь данные команды могут использоваться не только пользователем, но и установленными программами.
РЕКЛАМА
Оказывается посмотреть переменные, а также их значения можно используя командную строку (Win + R > cmd), в которую нужно ввести команду:
set
Заключение
Выяснили:
- %HOMEDRIVE% (открывает системный диска), %HOMEPATH% (открывает папку пользователя) — переменные системных папок, которые можно открыть из командной строки, окна Выполнить (Win + R) просто путем вставки команды и нажатия энтер.
Удачи.
Actual question
How can I «redirect» (symbolic links?) or temporarily change the values of %HOMEDRIVE%
and %HOMEPATH%
(maybe based on two batch scripts that change the values when I start working at the machine and reset everything after I’m done)?
Background
A lot of Windows programs pick up either system variable %USERPROFILE%
or a combination of %HOMEDRIVE%
and %HOMEPATH
in order to figure out where a user’s «home» directory is that they need to use (e.g. C:UsersJohnDoe
). Being a fan of the philosophy of portable apps (see at the bottom what I mean by that), I’m wondering if I could somehow make my home directory portable, i.e. have it point to a directory on a portable device. Or, in other words, I would like to make it «dynamically changeable».
What I tried
I’ve read a bit about Set
and Setx
and tried this:
Finding out what the current variable values are:
C:UsersJohnDoe> Set HOME
HOMEDRIVE=C:
HOMEPATH=Users<username>
Set them:
C:UsersJohnDoe> Setx HOMEDRIVE "d:"
C:UsersJohnDoe> Setx HOMEPATH "home"
That creates HOMEDIR
and HOMEPATH
as user-specific environment variables (see Control Panel >> System >> Environment Variables). But the «global ones» did not change and e.g. RStudio will not recognize the user-specific variables (still writes to C:UsersJohnDoes[...]
).
C:UsersJohnDoe> Set HOME
HOMEDRIVE=C:
HOMEPATH=Users<username>
Portable Apps
For example, see PortableApps.com or simply think «software that simply has been installed to a portable device instead of C:Program Files<app-name>
«. The latter works a treat for me for programs that don’t really care about %HOMEDRIVE%
and %HOMEPATH%
(e.g. Eclipse or R).
Some others (e.g. Git) just need to be tweaked a little bit (e.g. see this post).
Yet some others (e.g. RStudio) run in fact smoothly off the portable device, but write stuff to the user’s «home» directory. That’s the kind of software that I would like to tell to use a directory on my portable device instead.
Actual question
How can I «redirect» (symbolic links?) or temporarily change the values of %HOMEDRIVE%
and %HOMEPATH%
(maybe based on two batch scripts that change the values when I start working at the machine and reset everything after I’m done)?
Background
A lot of Windows programs pick up either system variable %USERPROFILE%
or a combination of %HOMEDRIVE%
and %HOMEPATH
in order to figure out where a user’s «home» directory is that they need to use (e.g. C:UsersJohnDoe
). Being a fan of the philosophy of portable apps (see at the bottom what I mean by that), I’m wondering if I could somehow make my home directory portable, i.e. have it point to a directory on a portable device. Or, in other words, I would like to make it «dynamically changeable».
What I tried
I’ve read a bit about Set
and Setx
and tried this:
Finding out what the current variable values are:
C:UsersJohnDoe> Set HOME
HOMEDRIVE=C:
HOMEPATH=Users<username>
Set them:
C:UsersJohnDoe> Setx HOMEDRIVE "d:"
C:UsersJohnDoe> Setx HOMEPATH "home"
That creates HOMEDIR
and HOMEPATH
as user-specific environment variables (see Control Panel >> System >> Environment Variables). But the «global ones» did not change and e.g. RStudio will not recognize the user-specific variables (still writes to C:UsersJohnDoes[...]
).
C:UsersJohnDoe> Set HOME
HOMEDRIVE=C:
HOMEPATH=Users<username>
Portable Apps
For example, see PortableApps.com or simply think «software that simply has been installed to a portable device instead of C:Program Files<app-name>
«. The latter works a treat for me for programs that don’t really care about %HOMEDRIVE%
and %HOMEPATH%
(e.g. Eclipse or R).
Some others (e.g. Git) just need to be tweaked a little bit (e.g. see this post).
Yet some others (e.g. RStudio) run in fact smoothly off the portable device, but write stuff to the user’s «home» directory. That’s the kind of software that I would like to tell to use a directory on my portable device instead.
Содержание
- Переменные среды Windows
- Переменные PATH и PATHEXT
- Создание переменных среды
- Заключение
- Вопросы и ответы
Переменная среды (переменная окружения) – это короткая ссылка на какой-либо объект в системе. С помощью таких сокращений, например, можно создавать универсальные пути для приложений, которые будут работать на любых ПК, независимо от имен пользователей и других параметров.
Получить информацию о существующих переменных можно в свойствах системы. Для этого кликаем по ярлыку Компьютера на рабочем столе правой кнопкой мыши и выбираем соответствующий пункт.
Переходим в «Дополнительные параметры».
В открывшемся окне с вкладкой «Дополнительно» нажимаем кнопку, указанную на скриншоте ниже.
Здесь мы видим два блока. Первый содержит пользовательские переменные, а второй системные.
Если требуется просмотреть весь перечень, запускаем «Командную строку» от имени администратора и выполняем команду (вводим и нажимаем ENTER).
set > %homepath%desktopset.txt
Подробнее: Как открыть «Командную строку» в Windows 10
На рабочем столе появится файл с названием «set.txt», в котором будут указаны все переменные окружения, имеющиеся в системе.
Все их можно использовать в консоли или скриптах для запуска программ или поиска объектов, заключив имя в знаки процента. Например, в команде выше вместо пути
C:UsersИмя_пользователя
мы использовали
%homepath%
Примечание: регистр при написании переменных не важен. Path=path=PATH
Переменные PATH и PATHEXT
Если с обычными переменными все понятно (одна ссылка – одно значение), то эти две стоят особняком. При детальном рассмотрении видно, что они ссылаются сразу на несколько объектов. Давайте разберемся, как это работает.
«PATH» позволяет запускать исполняемые файлы и скрипты, «лежащие» в определенных каталогах, без указания их точного местоположения. Например, если ввести в «Командную строку»
explorer.exe
система осуществит поиск по папкам, указанным в значении переменной, найдет и запустит соответствующую программу. Этим можно воспользоваться в своих целях двумя способами:
- Поместить необходимый файл в одну из указанных директорий. Полный список можно получить, выделив переменную и нажав «Изменить».
- Создать свою папку в любом месте и прописать путь к ней. Для этого (после создания директории на диске) жмем «Создать», вводим адрес и ОК.
%SYSTEMROOT% определяет путь до папки «Windows» независимо от буквы диска.
Затем нажимаем ОК в окнах «Переменные среды» и «Свойства системы».
Для применения настроек, возможно, придется перезапустить «Проводник». Сделать это быстро можно так:
Открываем «Командную строку» и пишем команду
taskkill /F /IM explorer.exe
Все папки и «Панель задач» исчезнут. Далее снова запускаем «Проводник».
explorer
Еще один момент: если вы работали с «Командной строкой», ее также следует перезапустить, то есть консоль не будет «знать», что настройки изменились. Это же касается и фреймворков, в которых вы отлаживаете свой код. Также можно перезагрузить компьютер или выйти и снова зайти в систему.
Теперь все файлы, помещенные в «C:Script» можно будет открывать (запускать), введя только их название.
«PATHEXT», в свою очередь, дает возможность не указывать даже расширение файла, если оно прописано в ее значениях.
Принцип работы следующий: система перебирает расширения по очереди, пока не будет найден соответствующий объект, причем делает это в директориях, указанных в «PATH».
Создание переменных среды
Создаются переменные просто:
- Нажимаем кнопку «Создать». Сделать это можно как в пользовательском разделе, так и в системном.
- Вводим имя, например, «desktop». Обратите внимание на то, чтобы такое название еще не было использовано (просмотрите списки).
- В поле «Значение» указываем путь до папки «Рабочий стол».
C:UsersИмя_пользователяDesktop
- Нажимаем ОК. Повторяем это действие во всех открытых окнах (см. выше).
- Перезапускаем «Проводник» и консоль или целиком систему.
- Готово, новая переменная создана, увидеть ее можно в соответствующем списке.
Для примера переделаем команду, которую мы использовали для получения списка (самая первая в статье). Теперь нам вместо
set > %homepath%desktopset.txt
потребуется ввести только
set > %desktop%set.txt
Заключение
Использование переменных окружения позволяет значительно сэкономить время при написании скриптов или взаимодействии с системной консолью. Еще одним плюсом является оптимизация создаваемого кода. Имейте в виду, что созданные вами переменные отсутствуют на других компьютерах, и сценарии (скрипты, приложения) с их использованием работать не будут, поэтому перед тем, как передавать файлы другому пользователю, необходимо уведомить его об этом и предложить создать соответствующий элемент в своей системе.
У меня есть ноутбук, на котором настроен профиль пользователя на сетевом диске. Это вызывает у меня много головной боли, так как подключение к моей компании очень медленное. Я хочу переместить профиль моего пользователя в локальный каталог. Как я могу это сделать?
Это настройки на данный момент:
C:>set HOME
HOMEDRIVE=P:
HOMEPATH=
HOMESHARE=\SOMESERVER_myuser$
Диск P является сетевым диском, сопоставленным с HOMESHARE.
Я не могу найти, где windows устанавливает эти переменные среды, даже в реестре.
Ноутбук работает под управлением Windows XP.
Ответы:
У меня была похожая проблема, которая вызвала проблемы с msysgit . Вот решение, которое я использовал, и оно определенно сработало для меня. Этот ответ похож на это и что SO пост.
-
Если вы работаете в Windows 7, вы можете пропустить этот шаг. Если вы на Windows XP, скачать и установить Windows XP с пакетом обновления 2 Инструменты поддержки , который содержит
SETX
, утилиту, описанную на SS64 и TechNet , что позволяет установить постоянные системные и пользовательские переменные. У вас должны быть права администратора для установки глобальных системных переменных. Основное использование естьSETX <variable> "<value>" [-m]
. -
Добавьте следующий скрипт в загрузочную папку — W7:
"C:Users<username>Start MenuProgramsStartup"
и XP:"C:Documents and Settings<username>Start MenuProgramsStartup"
.SETX HOMEDRIVE %SYSTEMDRIVE% -m SETX HOMEPATH "Documents and Settings%USERNAME%" -m SETX HOMESHARE "\<server><share>" -m SET HOME=%SYSTEMDRIVE%Documents and Settings%USERNAME% SETX HOME "%HOME%" SET TEMP=%HOME%Local SettingsTemp SETX TEMP "%TEMP%" SETX TMP "%TEMP%"
Примечание: SETX
переменные являются постоянными, но недоступны до тех пор, пока не будет запущен скрипт, поэтому используйте SET
для создания временных переменных в вашем скрипте. Также используются двойные кавычки вокруг значения, которое вы хотите установить для переменной, если в ней есть пробелы, но это не обязательно SET
. Машинные переменные устанавливаются с помощью -m
опции; переменная пользователя является значением по умолчанию. Windows 7 имеет гораздо больше вариантов и использует /
вместо -
.
Существует высокая вероятность того, что все, что вы измените, будет просто возвращено при следующем подключении к домену (с помощью групповых политик и т. П.).
Рассматривали ли вы вопрос ИТ-специалистов вашей компании, могут ли они изменить это для вас?
Возможно, создайте локального пользователя на ноутбуке для использования вне домена, чтобы вы не ждали этих ярлыков медленной связи, а также не пытались обойти настройки пользователя домена, установленные компанией.
У меня похожая проблема в моей корпоративной среде, и я разработал множество хаков и обходных путей . При моей текущей настройке следующие значения задаются доменом:
set HOME
HOMEDRIVE=G:
HOMEPATH=
HOMESHARE=\ServerUsersusername
Но с моим обходным путем, получающиеся отображения:
HOMEDRIVE => G: => \ServerUsersusername => C:Usersusername
HOMESHARE => \ServerUsersusername => C:Usersusername
В то время как другие пути сервера / сопоставления дисков отправляются на удаленный сервер:
O: => \ServerExample => \Real_ServerExample
\ServerExample => \Real_ServerExample
Они были протестированы только в Windows 7, но я полагаю, что они также будут работать в Windows XP, если у вас есть инструмент mklink.
Проблема возникает с TortoiseGit при работе вне офиса, где сетевой диск не подключен.
Меняется HOME
, HOMEPATH
не помогает !!
Решение:
mkdir c:home
net use g: /delete
subst g: c:home
Где g:
находится сетевой диск.
Они в расширенных системных свойствах. В Vista / Win 7:
- Щелкните правой кнопкой мыши «Мой компьютер»
- Выберите «Свойства»
- Выберите «Расширенные настройки системы» (ссылка в левой части окна)
- Выберите «Дополнительно» (вкладка)
- Выберите «Переменные среды» (кнопка)
Я знаю, что опоздал в эту ветку, но у меня возникла та же проблема, когда мой ИТ-отдел изменил групповые политики, и мой HOMEDRIVE стал M: вместо C: и HOMEPATH просто «» заменил на » Users [имя пользователя] ». Я посмотрел в коде Git и обнаружил, что он использует комбинацию HOMEDRIVE / HOMEPATH, только если HOME не определен.
Поэтому я просто определил HOME (который, к счастью, не был в GP) как «C: Users [username]», и Git .gitconfig
снова нашел .
I have got a laptop which is configured to have the user profile in a network drive. This is causing me a lot of headaches since the connectivity to my company is very slow. I want to relocate the profile of my user into a local directory. How do I do that?
Those are the settings at the moment:
C:>set HOME
HOMEDRIVE=P:
HOMEPATH=
HOMESHARE=\SOMESERVER_myuser$
The drive P is a network drive mapped to HOMESHARE.
I can’t find where windows is setting those environment variables, not even in the registry.
The laptop is running Windows XP.
fixer1234
26.8k61 gold badges72 silver badges115 bronze badges
asked Feb 16, 2011 at 20:41
I had a similar problem, which caused problems with msysgit. Here is the solution I used, and it definately worked for me. This answer is similar to this and that SO post.
-
If you are on Windows 7, you can skip this step. If you are on Windows XP, download and install Windows XP Service Pack 2 Support Tools which contains
SETX
, a utility, described on SS64 and technet, that lets you set permanent system and user variables. You must have administrative rights to set global system variables. The basic usage isSETX <variable> "<value>" [-m]
. -
Add the following script to your startup folder — W7:
"C:Users<username>Start MenuProgramsStartup"
and XP:"C:Documents and Settings<username>Start MenuProgramsStartup"
.SETX HOMEDRIVE %SYSTEMDRIVE% -m SETX HOMEPATH "Documents and Settings%USERNAME%" -m SETX HOMESHARE "\<server><share>" -m SET HOME=%SYSTEMDRIVE%Documents and Settings%USERNAME% SETX HOME "%HOME%" SET TEMP=%HOME%Local SettingsTemp SETX TEMP "%TEMP%" SETX TMP "%TEMP%"
Note: SETX
variables are permanent, but are not available until after the script runs, so use SET
to create temporary variables in your script. Also uses double quotes around the value you want to set your variable to in case it has spaces, but this is not necessary for SET
. Machine variables are set with the -m
option; user variable is the default. Windows 7 has many more options and uses /
instead of -
.
answered Nov 15, 2012 at 6:11
Problem occurs with TortoiseGit when working out of office, where network drive is not connected.
Changing HOME
, HOMEPATH
does not help!!
Solution:
mkdir c:home
net use g: /delete
subst g: c:home
Where g:
is network drive.
Toto
16.2k46 gold badges29 silver badges40 bronze badges
answered Sep 14, 2017 at 11:29
1
There’s a good chance that whatever you change will just get put back the next time you attach to the domain (via Group Policies or alike).
Have you considered asking your company’s IT folks if they can change that for you?
Perhaps create a local user on the laptop for use when outside of the domain, that way you’re not waiting for these slow-link shortcuts, nor are you trying to circumvent the domain user settings as laid out by the company.
answered Feb 16, 2011 at 22:22
Ƭᴇcʜιᴇ007Ƭᴇcʜιᴇ007
111k19 gold badges198 silver badges262 bronze badges
4
I have a similar problem in my corporate environment, and developed a variety of hacks and work-arounds. With my current setup the following values are forced by the domain:
set HOME
HOMEDRIVE=G:
HOMEPATH=
HOMESHARE=\ServerUsersusername
But with my workaround, the resulting mappings are:
HOMEDRIVE => G: => \ServerUsersusername => C:Usersusername
HOMESHARE => \ServerUsersusername => C:Usersusername
While other server paths / drive mappings go to the remote server:
O: => \ServerExample => \Real_ServerExample
\ServerExample => \Real_ServerExample
These have only been tested in Windows 7, but I would imagine that they will also work in Windows XP if you have the mklink tool.
answered Oct 5, 2012 at 15:41
TerranceTerrance
1,21611 silver badges10 bronze badges
1
I know I’m late to this thread, but I have got the same problem when my IT department changed group policies and my HOMEDRIVE has became M: instead for C: and HOMEPATH just «» insted for «Users [username]». I looked in Git code and found that it uses HOMEDRIVE/HOMEPATH combination only if HOME is not defined.
So I just defined HOME (which was fortunately not in GP) as «C:Users [username]» and Git has found .gitconfig
again.
174140
762 gold badges13 silver badges31 bronze badges
answered Oct 8, 2019 at 14:58
2
They’re in the advanced system properties. On Vista/Win 7:
- Right-click «My Computer»
- Select «Properties»
- Select «Advanced System Settings» (link on left side of window)
- Select «Advanced» (tab)
- Select «Environment Variables» (button)
answered Feb 16, 2011 at 20:44
5
You can modify in the registry (ouch!) but it may be superseded by group policy.
The best answer is to set a %HOME% before launching git, msysgit, git-bash, gitkraken or whatever.
Janusz has the right way to do it: thru windows environment variables (see Marc B for the mouse path)
answered May 27, 2020 at 8:10
1