Script para asignar letra permanente a usb en cualquier dispositivo

Iniciado por jorguko, 5 Junio 2019, 13:21 PM

0 Miembros y 1 Visitante están viendo este tema.

jorguko

Buenas , alguien sabe un script para asignar una letra persistente a un disco duro externo?

Probé creando los siguientes dos archivos , pero no funciona:

un archivo txt llamado mount.txt:



Código (dos) [Seleccionar]
list disk
select disk 6
list partition
select partition 0
assign letter=H
exit

un archivo bat:

diskpart /s mount.txt
exit





Mod: Prohibido publicar más de un tema con el mismo contenido. Prohibidos títulos todo en mayúsculas. Los códigos van entre etiquetas GeSHi.

Serapis

No. No conozco ninguno, en realidad no se puede garantizar. Una letra se asigna entre las libres disponibles.
Entre las libres, en general se toma la primera libre encontrada recorriendo el abecedario...

Si un sistema (caso de win2), recuerda un dispositivo externo, cuando se vuelva a conectar (a veces hay problemas si no es en el mismo puerto), si lo reconoce (lo localiza en el registro como que tiene 'conocimiento' e info de él), puede asignarle la misma letra que tuvo, pero incluso así, sólo si dicha letra está disponible...

...y basado en esto, tu mismo puedes crear un script (por supuesto algo más complicado que solo 4 líneas) que haga esto mismo. Detecte cuando un dispositivo se conecta, lo localice  en una tabla de existentes, si no está le asigne la siguiente letra vacía (o luego una de tu elección y guarde esa como la 'preferente'). Pero en tal caso, debes mantener el tema para todas las unidades que se conecten, para así al conectar una unidad no preferente, asignar otra y así poder dejar libre las que 'recuerda'.

Nota que cuando se acabare el abecedario, la inserción de una nueva unidad, exigiría sí o sí, utilizar una letra que ya otra unidad tiene reservada para sí, y por eso la gestión se complica un poco más (para casos pocos frecuentes), pero ahora cada vez que esa unidad se desconecte o conecte tendrá preferencia por esa letra, luego dos unidades estarían compitiendo por dicha letra.

En tu caso deberías añadir como propiedad de una unidad: Si tiene asignada una letra como preferente o no, así las unidades sin preferencia no precisan competir por una letra, tomará la libre entre las no preferentes. De igual modo, sería preciso mantener una colección, con las letras manteneidas en preferencia  (una colección de letras en este caso, equivale a un simple string, exactamente igual que el MRU). Cuando a una unidad se le establece una letra con preferencia se localiza si no está ocupafda ya como preferente y si se encuentra libre se asigna  si no se informa y en tal caso se muestra datos de la unidad que la tiene reservada (aunque esté ausente) y se pide confirmar (o de plano se niega, a gusto de tu interés). Una unidad que tenía una letra preferente y cambia a otra, hace lo mismo previo, pero de confrimarse el cambio, libera de las letras preferentes la que tenía antes... etc, etc...

Eleкtro

#2
La asignación de una letra de forma "persistente" se puede garantizar, aunque no con un simple script o mejor dicho no asignando la letra una única vez por las razones que el compañero @NEBIRE ya has explicado.

¿Solución?: conociendo un dato específico del disco en cuestión, como por ejemplo el número de serie o el nombre del disco, se puede desarrollar un software que trabaje en segundo plano (o un servicio de Windows) que se suscriba al evento de inserción de dispositivos externos (mediante WMI), y así si, siempre que el disco se inserte en el puerto USB, el software en cuestión detectará el evento de inserción, reconocerá el disco por su número de serie o nombre, y le podrá asignar la letra deseada. Si hay algún otro dispositivo ocupando esa letra, siempre se puede modificar de forma automatizada por otra letra aleatoria/libre para dejar libre esa letra ocupada y poder asignarla al disco externo. Esto sería lo más realista que se podría lograr en términos de persistencia, me refiero, al hablar de persistencia.




@jorguko:

Por un módico precio te ofrecería mis servicios para el desarrollo de un software a medida con una interfaz gráfica donde podrías personalizar una letra persistente para el disco o los discos que quisieras. Eso si, nada de scripts en Batch, sería un software desarrollado bajo .NET Framework (con el código fuente incluido en la entrega del mismo).
Si estás interesado entonces por favor notificamelo por privado. En cualquier caso arriba te expliqué de forma superficial el modo de lograr tu objetivo, y la información no es que sea dificil de encontrar, pero se requiere conocimientos de programación en cualquier lenguaje que pueda suscribirse a las clases de eventos de WMI (ej. PowerShell, C#, VB.NET...), así que olvídate de Batch-script ya que la única interoperabilidad posible con la infraestructura WMI mediante Batch, sería utilizando la aplicación externa WMIC.exe para realizar consultas simples.

EDITO: Como alternativa en Batch-script, siempre puedes crear un búcle "infinito" que cada 2 o 5 segundos analice los dispositivos conectados para hallar e identificar el disco externo que quieres (mediante una consulta con WMIC.exe para obtener el nombre o número de serie de cada disco conectado), y luego llevar a cabo las operaciones necesarias con DiskPart.exe para asignarle la letra deseada y liberar esa letra si ya estuvies eocupada por otro dispositivo.
En este aporte de aquí abajo que publiqué en el foro, puedes encontrar un código que te serviría de forma parcial (para orientarte) sobre como podrías empezar a codear ese búcle infinito donde obtener las unidades y analizarlas:
   
(el búcle al que me refiero lo puedes encontrar a partir de la etiqueta con nombre ':MONITOR')

Pero en mi humilde opinión, no merece la pena hacer esto en Batch-script. Código tedioso o engorroso, ejecución lenta, y muchas imperfecciones por naturaleza.

Un saludo y suerte.