¿Cómo hacer que la asignación SUBST sea persistente en todos los reinicios?

177

¿Windows (XP o posterior) tiene una forma integrada de crear asignaciones de unidades persistentes, como las que crea SUBST? Encontré una herramienta de terceros psubst . ¿Hay alguna manera de hacerlo sin herramientas de terceros?

almiar
fuente
Es posible, porque psubstes solo un archivo .bat que interfiere con el registro. Consulte la respuesta de @ davr a continuación para obtener más detalles.
Scott Stafford
Advertencia del artículo de Wikipedia en la respuesta aceptada: " A partir de Windows Vista, los archivos eliminados se eliminan inmediatamente de forma permanente y no se mueven a la" Papelera de reciclaje ". Antes de Windows Vista (en Windows XP, por ejemplo) archivos de sustituidos" los discos "se movieron a la Papelera de reciclaje cuando se eliminaron " .
JMD
1
@IvoFlipse, esa es una buena suposición en general, pero en este caso está mal. La 'herramienta de terceros' es un archivo por lotes de 150 líneas que proporciona un buen cli para modificar un registro y limpiar la entrada para cumplir con substlas exigentes reglas de barra inclinada final, pero es simplemente un buen envoltorio . Puede hacerlo sin un programa, y ​​el archivo README para psubstexplica cómo. O, vea la respuesta de davr a continuación donde cita el archivo README de psubst.
alexanderbird
He agregado una respuesta que soluciona el problema de la Papelera de reciclaje
Tony Pulokas

Respuestas:

153

Bueno, Wikipedia menciona :

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.

Para que pueda asociar rutas con letras de unidad usando subst. El software del comando SUBST persistente (psubst) parece ser muy útil, y proporcionan una solución para ejecutarlo desde el inicio:

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

Inconstancia

Sin embargo, el reinicio de un sistema destruye un disco virtual. ¿Qué hacer? Se puede crear un disco después del inicio. Pero, ¿qué hacer cuando se necesita un disco en los primeros pasos de un inicio? Por ejemplo, para ejecutar servicios? Hay una función del sistema para iniciar un disco virtual desde el registro del sistema:

REGEDIT4 

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

Es suficiente crear un archivo de texto con la extensión .REGy ejecutarlo. La próxima vez que se inicie un sistema, el disco virtual existirá al iniciar sesión. Necesita definir un nombre de disco y ruta. Tenga en cuenta que cada barra diagonal inversa en la ruta se duplica.

En Windows, puede ejecutar el editor de registro de la siguiente manera:

  1. Inicio »Ejecutar ... (o presionar Win+ R)
  2. Tipo: regedit
  3. En Windows Vista y superior, aparecerá UAC, haga clic en "Sí" .
Ivo Flipse
fuente
66
Es bueno saberlo, aunque ya no lo uso subst. Pero en los tiempos en que lo hacía, solía tener un archivo por lotes en mi carpeta de Inicio que hacía esas cosas.
Joey
2
Esto es asombroso (Requiere un reinicio, para su información). Nuestro árbol de origen debe comenzar desde una letra de unidad específica para que nuestros PDB siempre se alineen en diferentes computadoras. Esta configuración de registro resuelve una molestia que he tenido durante años con un disco secundario que no está allí con runas, lo cual es una gran molestia si necesita (raramente) ejecutar Visual Studio con una cuenta de administrador.
Brian Reiter
3
Joey: Esa solución no parece funcionar en Windows 7. Al ejecutar una aplicación con privilegios administrativos, la unidad sustituida no es visible para la aplicación.
Dave Jarvis
31
Gracias por la solucion. Para su información, si escribe la variable en RegEdit de forma interactiva, no duplique las barras invertidas. Es decir, cree una nueva variable de cadena denominada "Z:" (sin las comillas) y establezca el valor en la cadena que se muestra arriba, excepto con barras diagonales inversas simples.
Crujiente
3
@ Devil'sAdvocate, \??es un directorio virtual en el espacio de nombres del administrador de objetos NT. Primero comprueba los 'dispositivos' de DOS de la sesión de inicio de sesión (realmente los dispositivos DOS son enlaces simbólicos a dispositivos NT, generalmente ubicados en \Device) y luego los \Global??dispositivos DOS. En WinObj encontrará los dispositivos de sesión de inicio de sesión \Sessions\0\DosDevices\[logon ID]. Observe que todos los dispositivos de sesión de inicio de sesión se rastrean en la sesión 0 (servicios) para cada ID de inicio de sesión LSA. No están correlacionados con las sesiones de escritorio. Es por eso que si asigna un disco como administrador limitado, no existe cuando está elevado; Es un inicio de sesión diferente.
Eryk dom
76

Instalarlo en HKEY_CURRENT_USERtiene la ventaja de tener diferentes configuraciones para cada usuario. Prefiero mantener la configuración del espacio del usuario siempre que un servicio del sistema no dependa del dispositivo.

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

Fuente: http://networkadminkb.com/KB/a446/how-to-use-drive-letters-mount-points-the-same-disk-drive.aspx

166_MMX
fuente
77
+1 Para mostrar cómo hacer asignaciones múltiples en un archivo de registro. :-)
megaflop
44
Haz +1 por la facilidad de esto y también explica por qué HKEY_CURRENT_USER. :)
CAD bloke
1
+1 por mostrar una forma muy elegante de hacerlo
automáticamente
3
También puede hacerlo desde la línea de comandos (desde XP / Windows Server 2000): reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "F Drive" /d "subst F: D:\x\db" NB \ sólo necesita escapar de aquí si es el último carácter del comando subst, por ejemplo, cuando el objetivo es el directorio raíz: "subst F: D:\\"; una sola \ no se interpretaría como escapar de la "después de ella.
stevek_mcc
45

Hay una respuesta en la página a la que enlazaste. No necesita la herramienta de terceros, puede hacerlo con una simple entrada de registro, como se detalla en esa página.

Cree un archivo de texto llamado 'mapdrive.reg' con estos contenidos:

REGEDIT4 

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

Entonces debería poder hacer doble clic en él para configurarlo, no se necesitan herramientas de terceros.

davr
fuente
8
La ventaja de la clave reg en comparación con el archivo por lotes es que establece la unidad secundaria antes de que se ejecute cualquier otro comando de inicio, en caso de que algunas de ellas necesiten la unidad
secundaria
66
@Ivo: lo llamaría un miedo saludable a lo desconocido;)
Isxek
99
Si hace esto en regedit, asegúrese de usar barras diagonales inversas simples. eg \ ?? \ C: \ Some \ Directory
Droj
27

Encontré esto porque estaba buscando una mejora con respecto a mis scripts de inicio subst: funcionaban bien, pero a veces se ejecutaban después de que las carpetas fallaban al inicio porque mi unidad aún no estaba asignada.

Primero, edité el registro, pero no pude hacerlo funcionar. Sin embargo, me encontré con esta alternativa, que aunque no usa subst, me responde la pregunta "¿Cómo hacer que la asignación de SUBST sea persistente en todos los reinicios?" No use subst ... (inserte 'computerName' y 'pathName' apropiados):

uso neto u: "\\ computerName \ c $ \ pathName" / persistente: sí

Adapte esto de la sugerencia de Hank Arnold en esta discusión de mapeo de unidades locales . Había adivinado que \\ myComputerName \ c podría funcionar, pero no sabía cómo aplicar el $.

Antes de probar el comando "uso neto", intente navegar a

\\ computerName \ c $
para asegurarse de que tiene "computerName" correcto.

sabio
fuente
2
Excelente solución, aunque con dos problemas: 1) no es visible para el sistema de archivos local, 2) permisos ...
cenizas999
66
si lo usa \\localhost\c$\path\to\thinges portátil en todas las máquinas (o actualizaciones que cambian el nombre de la computadora). Una desventaja de usar una unidad asignada en Win7 + es que se aplican políticas de seguridad diferentes a las unidades de red que las locales, y algunos programas simplemente se negarán a ejecutar una unidad asignada.
Matt Wilkie
1
Es visible para el sistema de archivos, y es visible para el sistema de archivos local: está marcado como una unidad de red, al igual que algunas unidades están marcadas como unidades extraíbles. Eso no hace que tales unidades no formen parte del sistema de archivos local o no sean visibles, sino que las convierte en unidades de red / extraíbles en el sistema de archivos local.
user165568
1
En las pruebas que hice por un problema de rendimiento (hace un par de años), usar la unidad de red montada (localmente) también es más lenta que usar el sistema de archivos (o subst, etc.) directamente. Esta no es una gran diferencia para los archivos pequeños o el uso ocasional, no como pasar por la red real a otro 'servidor', pero es significativo.
HerbM
8

Suelte un archivo por lotes en su carpeta de Inicio que hace todos los SUBST que desea hacer.

EBGreen
fuente
5

Como el PSubst original tiene algunas limitaciones y parece haber sido concluido por el autor, tuve que codificar una nueva versión para mis necesidades, solucionando algunos problemas y agregando funcionalidad y flexibilidad.

Verifique aquí el archivo por lotes de PSubst versión 3

https://github.com/cyberponk/psubst

Compatible con Windows 7, Windows 8, Windows 10, Windows Server 2012

Nota: Este trabajo no tiene la intención de desmerecer al autor original y solo llegó a existir debido a una necesidad real, de la siguiente manera:

  • Como administrador de newtork, tengo la constante necesidad de SUBST de unidades de red y jugar con diferentes usuarios de la red.

  • Como no todos son expertos en Windows, pensé que la elevación automática del administrador con manejo de errores ayudaría, según los comentarios que leí en la web.

  • Mientras algunas personas luchaban con el orden de los argumentos, pensé que sería mejor que el guión funcionara con los argumentos en cualquier orden.

No recuerdo todas las funcionalidades añadidas, pero cada inclusión se realizó por pura necesidad. Estoy compartiendo el código para que otros no puedan encontrar los problemas que tuve. Por esto no hay otra intención que compartir y ayudar.

cyberponk
fuente
Por favor, diciendo "A" di "B". Te sientes seguro de que el psubst original tiene muchos problemas, por favor, apúntalo si es así. Por otro lado, psubst no se abandona. Acaba de alcanzar el límite de su desarrollo. La herramienta original sigue una filosofía muy simple: hacer algo y hacerlo bien. No está sobrecargado con funcionalidades adicionales como manejar con UAC y crear código vbs adicional para hacer algo más. Se puede hacer una cosa sobre el código original: algunos cambios cosméticos para simplificar el código y mejorar la legibilidad.
jsxt
Editado, por favor revise. UAC y vbs es para elevación automática de administrador. No estoy de acuerdo con el comentario del "límite de desarrollo", ya que todos los cambios que hice fueron para hacer el uso aún más simple y fácil después de encontrar varios problemas al usar PSUBST. No pretendo criticar al autor original, por lo que no enumeraré los problemas, sino que creé soluciones. En realidad, propuse agregar mis ediciones en la rama original de Github, pero me rechazaron, así que tuve que crear mi propia rama.
cyberponk
Gracias por sus comentarios rápidos y detallados. Lo más probable es que necesite echar un vistazo a su desarrollo más de cerca.
jsxt
Me quito el sombrero ante ti; He pasado mi tiempo en las trincheras de secuencias de comandos por lotes, y sé lo doloroso que es. Ese código se ve bastante bien.
SilverbackNet
2

Estoy ampliando la respuesta de davr porque los archivos que se eliminan de la unidad asignada se eliminan permanentemente en lugar de ir a la Papelera de reciclaje. Este archivo REG se basa en la información compilada de este artículo de TechNet , que analiza cómo habilitar la Papelera de reciclaje. El ejemplo asigna la unidad virutal Q a la carpeta "OneDrive - Test" y habilita la Papelera de reciclaje en la unidad Q. Cambie los caminos y el nombre para adaptarse a su situación.

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

Si solo tiene una de estas unidades asignadas, puede escapar con el GUID {9147E464-33A6-48E2-A3C9-361EFD417DEF}. Si tiene varias unidades asignadas, cada una debe coincidir con un GUID de su generador de GUID favorito.

Tony Pulokas
fuente
Algunas de mis observaciones: si solo establece los valores debajo HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{GUID}y reinicia, los valores correspondientes debajo HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{GUID}son generados automáticamente por Windows. Nada apareció para mí debajo de las Wow6432Nodellaves, pero la papelera de reciclaje funcionó sin ellas. Esto estaba en un sistema Windows 7, por lo que no estoy seguro de si se comporta de manera diferente en las versiones más recientes.
Herohtar
1
Solo para agregar un poco de datos, tengo un sistema Win 10 de 64 bits, y probé lo que sucedió al borrar de una aplicación de 32 bits (FastStone Image Viewer), y descubrí que la papelera de reciclaje no funcionaba para los 32 de bits sin las claves Wow6432Node.
Tony Pulokas