Как сделать отображение SUBST постоянным при перезагрузках?


177

Есть ли в Windows (XP или более поздняя версия) встроенный способ создания постоянных сопоставлений дисков, аналогичный тем, которые создает SUBST? Я нашел сторонний инструмент psubst . Есть ли способ сделать это без сторонних инструментов?


Это возможно, потому что psubstэто просто файл .bat, который портит реестр. Смотрите ответ @ davr ниже для деталей.
Скотт Стаффорд

Предостережение из статьи Википедии в принятом ответе: « Начиная с Windows Vista, удаленные файлы немедленно удаляются навсегда и не перемещаются в« Корзину ». До Windows Vista (в Windows XP, например) файлы из замещенных» диски "были перемещены в корзину при удалении. "
JMD

1
@ IvoFlipse, это хорошее предположение в целом, но в данном случае это просто неправильно. «Сторонний инструмент» - это пакетный файл из 150 строк, который обеспечивает удобную среду для изменения реестра и очистки входных данных, чтобы они соответствовали substотборным правилам конечной косой черты, но это просто симпатичная оболочка . Вы можете сделать это без программы, и README psubstобъясняет, как. Или см . Ответ Давра ниже, где он цитирует псевдоним README.
alexanderbird

Я добавил ответ, который решает проблему с
корзиной

Ответы:


153

Ну, Википедия упоминает :

C:\>SUBST /?
Associates a path with a drive letter.

SUBST [drive1: [drive2:]path]
SUBST drive1: /D

  drive1:        Specifies a virtual drive to which you want to assign a path.
  [drive2:]path  Specifies a physical drive and path you want to assign to
                 a virtual drive.
  /D             Deletes a substituted (virtual) drive.

Type SUBST with no parameters to display a list of current virtual drives.

Таким образом, вы можете связать пути с буквами дисков, используя subst. Программное обеспечение Persistent SUBST (psubst) выглядит чертовски удобным, и оно предоставляет решение для запуска его из автозагрузки:

https://code.google.com/p/psubst/#Inconstancy

Непостоянство

Однако перезапуск системы уничтожает виртуальный диск. Что делать? Диск может быть создан после запуска. Но что делать, если на ранних этапах запуска требуется диск? Например, запустить сервисы? Существует системная функция для запуска виртуального диска из системного реестра:

REGEDIT4 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices] 
"Z:"="\\??\\C:\\Documents and Settings\\All Users\\Shared Documents"

Достаточно создать текстовый файл с расширением .REGи запустить его. При следующем запуске системы виртуальный диск будет существовать при входе в систему. Необходимо определить имя диска и путь. Обратите внимание, что каждый обратный слеш в пути удваивается.

В Windows вы можете запустить редактор реестра следующим образом:

  1. Пуск »Выполнить ... (или нажать Win+ R)
  2. Тип: regedit
  3. В Windows Vista и выше, появится UAC, нажмите «Да» .

6
Приятно знать, хотя я больше не пользуюсь subst. Но в те времена, когда я это делал, у меня в папке «Автозагрузка» был просто пакетный файл, который делал эти вещи.
Джои

2
Это круто. (Требуется перезагрузка, к вашему сведению.) Наше дерево исходных текстов должно начинаться с определенной буквы диска, чтобы все наши PDB всегда выравнивались на разных компьютерах. Этот параметр реестра устраняет раздражение, которое я испытывал в течение многих лет, когда субстрат отсутствовал с runas, что является большим раздражением, если вам нужно (редко) запускать Visual Studio под учетной записью администратора.
Брайан Рейтер

3
Джои: Это решение, похоже, не работает под Windows 7. При запуске приложения с правами администратора замененный диск не виден приложению.
Дэйв Джарвис

31
Спасибо за решение. К вашему сведению, если вы введете переменную в RegEdit интерактивно, не удваивайте обратную косую черту. То есть создайте новую строковую переменную с именем «Z:» (без кавычек) и задайте значение для строки, показанной выше, за исключением одиночных обратных косых черт.
Хрустящие

3
@ Devil'sAdvocate \??- это виртуальный каталог в пространстве имен диспетчера объектов NT. Сначала он проверяет «устройства» DOS сеанса входа в систему (на самом деле устройства DOS - это символические ссылки на устройства NT, обычно расположенные в нем \Device), а затем \Global??устройства DOS. В WinObj вы найдете устройства сеанса входа в систему \Sessions\0\DosDevices\[logon ID]. Обратите внимание, что все устройства сеанса входа отслеживаются в сеансе 0 (службы) для каждого идентификатора входа LSA. Они не связаны с настольными сессиями. Вот почему, если вы отображаете диск как ограниченный администратор, он не существует при повышении; это другой вход в систему.
Eryk Sun

76

Установка его на HKEY_CURRENT_USERимеет то преимущество, что разные настройки для каждого пользователя. Я предпочитаю придерживаться настройки пользовательского пространства до тех пор, пока системный сервис не зависит от устройства.

REGEDIT4
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
"F Drive"="subst F: D:\\mount\\db"
"G Drive"="subst G: D:\\mount\\log"

Источник: http://networkadminkb.com/KB/a446/how-to-use-drive-letters-mount-points-the-same-disk-drive.aspx


7
+1 За показ того, как сделать несколько сопоставлений в одном reg-файле. :-)
мегафлоп

4
+1 для простоты этого и объяснения, почему HKEY_CURRENT_USER. :)
САПР bloke

1
+1 за показ очень элегантного способа сделать это автоматически без пакета в папке автозагрузки
dkellner

3
Это также можно сделать из командной строки (начиная с сервера XP / Windows 2000): reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "F Drive" /d "subst F: D:\x\db" NB \ необходимо экранировать только в том случае, если это последний символ команды subst, например, когда целью является корневой каталог "subst F: D:\\":; один \ там будет интерпретироваться как выход из "после него"
stevek_mcc

45

На странице, на которую вы ссылаетесь, есть ответ. Вам не нужен сторонний инструмент, вы можете сделать это с помощью простой записи в реестре, как подробно описано на этой странице.

Создайте текстовый файл с именем «mapdrive.reg» со следующим содержимым:

REGEDIT4 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices] 
"Z:"="\\??\\C:\\Documents and Settings\\All Users\\Shared Documents" 

Тогда вы сможете просто дважды щелкнуть по нему для настройки, не требуются сторонние инструменты.


8
Преимущество ключа reg по сравнению с командным файлом заключается в том, что он устанавливает вспомогательный диск перед запуском любых других команд запуска, если некоторым из них требуется дополнительный диск для работы
davr

6
@Ivo: я бы назвал это здоровым страхом перед неизвестным;)
Isxek

9
Если вы делаете это в regedit, убедитесь, что вы используете одинарные обратные слеши. например, \ ?? \ C: \ Some \ Directory
Дрой

27

Я обнаружил это потому, что искал улучшения по сравнению с моими сценариями запуска при загрузке - они работали нормально, но иногда выполнялись после сбоя папок при запуске, поскольку мой диск еще не был подключен.

Сначала я отредактировал реестр, но не смог заставить его работать. Однако я наткнулся на эту альтернативу, которая, хотя она и не использует subst, отвечает мне на вопрос: «Как сделать отображение SUBST постоянным при перезагрузках?» Не используйте subst ... (вставьте соответствующие 'computerName' и 'pathName'):

net use u: "\\ computerName \ c $ \ pathName" / постоянный: да

Я адаптировал это из предложения Хэнка Арнольда в этом обсуждении картирования локальных дисков . Я догадывался, что \\ myComputerName \ c может работать, но я не знал, как применить $.

Прежде чем пытаться использовать команду «net use», попробуйте перейти к

\\ имя_компьютера \ с $
чтобы убедиться, что у вас правильное имя компьютера.


2
Отличное решение, хотя и с двумя проблемами: 1) он не виден локальной файловой системе, 2) права доступа ...
ashes999

6
если вы используете \\localhost\c$\path\to\thingего, он переносим между компьютерами (или обновлениями, которые изменяют имя компьютера). Недостаток использования подключенного диска в Win7 + заключается в том, что к сетевым дискам применяются политики политики, отличные от локальных, и некоторые программы просто отказываются запускать подключенный диск.
Мэтт Уилки

1
Он видим для файловой системы и для локальной файловой системы - он помечен как сетевой диск, так же как некоторые диски помечены как съемные диски. Это не делает такие диски не частью или невидимыми для локальной файловой системы - это делает их сетевыми / съемными дисками в локальной файловой системе.
user165568

1
В тестировании, которое я сделал для проблемы с производительностью (пару лет назад), использование (локально) подключенного сетевого диска также медленнее, чем прямое использование файловой системы (или подсистемы и т. Д.). Это не огромная разница для небольших файлов или случайного использования - не то же самое, что переход по реальной сети на другой «сервер», - но это важно.
HerbM

8

Поместите пакетный файл в папку «Автозагрузка», которая выполняет все действия SUBST, которые вы хотите выполнить.


5

Поскольку исходный PSubst имеет некоторые ограничения и, похоже, был сделан автором, мне пришлось написать новую версию для своих нужд, исправить некоторые проблемы и добавить функциональность и гибкость.

Проверьте здесь для PSubst версии 3 пакетного файла

https://github.com/cyberponk/psubst

Совместим с Windows 7, Windows 8, Windows 10, Windows Server 2012

Примечание: эта работа не имеет намерения унижать первоначального автора и возникла только из-за реальной необходимости, а именно:

  • Как администратор newtork, я постоянно нуждаюсь в сетевых дисках SUBST и общаюсь с разными пользователями сети.

  • Поскольку не все являются экспертами по Windows, я подумал, что автоматическое повышение прав администратора с обработкой ошибок поможет, основываясь на комментариях, которые я читаю через Интернет.

  • Поскольку некоторые люди боролись с порядком аргументов, я подумал, что было бы лучше, если бы скрипт работал с аргументами в любом порядке.

Я не могу вспомнить каждую добавленную функциональность, но каждое включение было сделано по необходимости. Я делюсь кодом, чтобы другие могли не столкнуться с неприятностями, которые у меня были. Этим нет другого намерения, кроме как делиться и помогать.


Пожалуйста, сказав «А», скажите «Б». Вы уверены, что у оригинального psubst есть много проблем - пожалуйста, укажите на них, если они есть. С другой стороны, psubst не заброшен. Он только что достиг предела своего развития. Оригинальный инструмент следует очень простой философии: делай что-то и делай хорошо. Он не перегружен дополнительными функциями, такими как обработка UAC и создание дополнительного vbs-кода для выполнения чего-то большего. С исходным кодом можно сделать одну вещь - некоторые косметические изменения, упрощающие код и улучшающие читаемость.
jsxt

Отредактировано, пожалуйста, просмотрите. UAC и VBS для автоматического повышения прав администратора. Я не согласен с комментарием «предел развития», так как все изменения, которые я сделал, должны были сделать использование еще более простым и легким после того, как я столкнулся с несколькими проблемами с использованием PSUBST. Я не собираюсь критиковать оригинального автора, поэтому я не буду перечислять проблемы, но вместо этого я создал решения. На самом деле я предложил добавить свои издания в исходную ветку github, но получил отказ, поэтому мне пришлось создать свою собственную ветку.
киберпонк

Спасибо за ваш быстрый и подробный отзыв. Скорее всего, мне нужно взглянуть на ваше развитие ближе.
jsxt

Моя шляпа тебе снята; Я провел свое время в окопах пакетного скриптинга, и я знаю, как это больно. Этот код выглядит довольно хорошо.
SilverbackNet

2

Я расширяю ответ Давра, потому что любые файлы, которые удаляются с подключенного диска, удаляются навсегда, а не попадают в корзину. Этот файл REG основан на информации, собранной из этой статьи TechNet , в которой обсуждается, как включить корзину. В этом примере виртуальный диск Q отображается в папку «OneDrive - Test» и включается корзина на диске Q. Измените пути и имя в соответствии с вашей ситуацией.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices]
"Q:"="\\??\\C:\\Users\\Tony\\OneDrive - Test"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{9147E464-33A6-48E2-A3C9-361EFD417DEF}]
"RelativePath"="Q:\\"
"Category"=dword:00000004
"Name"="Q_Mapped_OneDrive"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{9147E464-33A6-48E2-A3C9-361EFD417DEF}]
"MaxCapacity"=dword:0000c7eb
"NukeOnDelete"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{9147E464-33A6-48E2-A3C9-361EFD417DEF}]
"RelativePath"="Q:\\"
"Category"=dword:00000004
"Name"="Q_Mapped_OneDrive"

[HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{9147E464-33A6-48E2-A3C9-361EFD417DEF}]
"MaxCapacity"=dword:0000c7eb
"NukeOnDelete"=dword:00000000

Если у вас есть только один такой подключенный диск, вы можете получить код GUID {9147E464-33A6-48E2-A3C9-361EFD417DEF}. Если у вас есть несколько подключенных дисков, то каждый из них должен соответствовать GUID из вашего любимого генератора GUID.


Некоторые из моих наблюдений: если вы просто установите значения в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{GUID}и перезагрузите компьютер, соответствующие значения в HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{GUID}автоматически генерируются Windows. У меня ничего не появилось под Wow6432Nodeклавишами, но корзина работала без них. Это было в системе Windows 7, поэтому я не уверен, что она ведёт себя по-разному в новых версиях.
Геройтар

1
Чтобы добавить немного данных, у меня есть 64-разрядная система Win 10, и я проверил, что произошло при удалении из 32-разрядного приложения (FastStone Image Viewer), и обнаружил, что корзина не работает для 32 приложение без ключей Wow6432Node.
Тони Пулокас
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.