Necesito ayuda para crear dos .BAT que Agregue y quite la letra de una unidad

Bueno pues tan y como dice el titulo necesito crear 2 archivos por lotes uno de ellos con la función de agregar una letra a una partición (previamente sin letra) y otra archivo por lotes que haga justo lo contrario (quitar dicha letra y volver a ocultar dicha partición).
La idea de tras de esto es tener una partición (un HDD entero más bien XD ) oculta de la simple vista y que llegado un momento previsto cundo se vaya a realizar una copia de seguridad de una partición visible (llámese "B") a dicha partición oculta (llamase "H") se "desoculte" pudiendo así proceder a copiar B-->H y que cuando termine dicha copia "H" vuelva a ocultarse.

Para hacer esto uso el programa de copias "COBIAN" el cual me permite ejecutar archivos externos "previos y pos" copia. De esa forma se me ocurrió crear un archivo .bat que asignara una letra a dicha unidad Cobian automáticamente antes de proceder a realizar la copia de seguridad ejecutaría dicho archivo .bat haciendo que la unidad "H" este disponible para realizar dicha copia. Tras finalizar dicha copia de seguridad el mismo Cobian ejecutaría el otro archivo .bat volviendo a ocultar dicha partición.

El problema es que aunque creo saber que comandos ejecutar no consigo hacerlo funcionar desde un .bat (si desde la ventana de comandos cmd)
1) diskpart
2) list disk
3) select disk "6" (ese el el HDD que se corresponde con la partición "H")
4) list volume
5) select volume 0 (entiendo que al tener solo una partición su numero sera el "0")
6) assign letter=H o remove letter=H (dependiendo de si es el .bat de asignar letra o de quitársela)
7) exit

Todo esto mediante ventana de comandos (cmd) me funciona a la primera pero mediante bat como digo no tengo ni idea de como hacerlo así pues agradecería que me echaseis una mano [angelito] .

Saludos
@Perfect Ardamax

Crea un script para diskpart, un archivo txt con el contenido que quieras, mount.txt

list disk
select disk "6"
list volume
select volume 0
assign letter=H



diskpart /s mount.txt
@theelf
¿Y no puedo ponerlo todo en el mismo archivo?
Lo digo porque el "bat" en cuestión mi idea es ocultarlo en la raíz C y el de quitar la letra a a la unidad ponerlo también como oculto en H. Si lo hago como sugieres entonces tendria que ocultar también 2 archivos.txt extra.

Mi idea se hacerlo todo dentro de los 2 archivos .bat pero por alguna razon no consigo que se ejecuten (si lo pongo directamente en ventana de comando si que me va).

Saludos
@Perfect Ardamax

Que recuerde diskpart no soporta linea de comandos. Crea el archivo dinamicamente, cargalo y luego lo borras

echo list disk>mount.txt
echo select disk "6">>mount.txt
echo list volume>>mount.txt
echo select volume 0>>mount.txt
echo assign letter=H>>mount.txt
diskpart /s mount.txt
del mount.txt



No te va en un batch, porque diskart no acepta comandos desde un archivo batch, a menos que crees un script avanzado


Lo que no me termina de quedar claro es para que necesitas dos archivos batch
theelf escribió:@Perfect Ardamax

Que recuerde diskpart no soporta linea de comandos. Crea el archivo diatónicamente, cárgalo y luego lo borras

echo list disk>mount.txt
echo select disk "6">>mount.txt
echo list volume>>mount.txt
echo select volume 0>>mount.txt
echo assign letter=H>>mount.txt
diskpart /s mount.txt
del mount.txt



No te va en un batch, porque diskart no acepta comandos desde un archivo batch, a menos que crees un script avanzado


Lo que no me termina de quedar claro es para que necesitas dos archivos batch


OK entiendo pues que voy a tener que usar si o si los .txt [oki]
Sobre lo de los 2 archivos es porque solo quiero que la unidad este montada durante el proceso de copia de seguridad una vez dicho proceso termine dicha unidad deve volver a desmontarse (quitar la letra).
De hay que necesite 2 txt uno de ellos para asignar la letra a la unidad y montar la particion y otro para quitarle la letra y hacer desaparecer la particion cuando la copia de seguridad haya terminado.

Haber entonces para que me aclare:
Creo un documento de texto (mount.txt) y dentro de este pongo:
echo list disk>mount.txt
echo select disk 6>>mount.txt
echo list volume>>mount.txt
echo select volume 0>>mount.txt
echo assign letter=H>>mount.txt


Después creo un .bat con:
diskpart /s mount.txt


¿Lo he entendido bien?

Saludos
@Perfect Ardamax

No entiendo lo de los dos batch, tal vez no capto lo que quieres hacer, pero tecnicamente los dos archivos haran lo mismo no? o sea, uno monta una unidad H, el otro la desmonta..? si es asi, no veo razon para repetir :-?

No tienes que crear ningun txt, solo un archivo batch, con algo asi.



if exist H:\ (goto mount)

echo list disk>mount.txt
echo select disk "6">>mount.txt
echo list volume>>mount.txt
echo select volume 0>>mount.txt
echo assign letter=H>>mount.txt
echo exit>>mount.txt
diskpart /s mount.txt
exit


:mount
echo list disk>mount.txt
echo select disk "6">>mount.txt
echo list volume>>mount.txt
echo select volume 0>>mount.txt
echo remove letter=H>>mount.txt
echo exit>>mount.txt
diskpart /s mount.txt
exit



Mas simple que el mecanismo de un chupete, pero creo que cumplira
@theelf
Nada que no hay forma.
He conseguido que me los monte y me los desmonte (tuve que corregir algunas cosillas de tú código pero nada importante)
El problema ahora es que desde Cobian no me monta/desmonta nada.
Es decir lo configuro para que ejecute el archivo mount antes de iniciar la copia (ya parece que va porque durante unos segundo se me abre la linea de comandos) el problema aquí es que la ventana que se me abre de la linea de comandos no monta la unidad.
Sospecho que es un tema de permisos es decir. Si yo ejecuto ese mismo archivo de forma manual el partición se monta/desmonta sin problemas. Pero en cuanto le digo a Cobian que lo haga por algún motivo que desconozco "ejecutar lo ejecuta" pero la partición no se monta y tampoco se desmonta (montandola yo manualmente)

¿Alguna idea?

Saludos
@Perfect Ardamax

No se que es cobian, pero el batch no requiere nada mas que permisos de escritura donde tiene que crear el txt

Imagino necesitas admin o algun usuario con permisos para diskpart
@theelf
http://www.cobiansoft.com/index.htm

Cobian se esta ejecutando en mi usuario (soy admin) aun así como digo no hace su trabajo (la ventana de CMD se abre ejecuta los comandos pero Windows no monta la unidad.
En cambio si ejecuto yo manualmente el BAT Windows si que me monta la unidad.
Así que entiendo que por algún motivo que desconozco Windows no manta las unidades cuando la aplicación (Cobian) es el responsable de la ejecución del BAT en cambio como digo si lo hago yo manualmente (haciendo doble clic sobre el archivo en cuestión) hay si que se monta sin problemas.

Tambien he probado ha hacerlo mediante la opcion de cobian de "command line" poniendo "diskpart /s mount.txt" con el mismo resultado.

¿Ideas?

Saludos
@Perfect Ardamax

Desconozco el programa como funcione, pero lo que primero miraria es si se esta creando el txt correctamente
@theelf
Al final no lo he hecho a tú forma si no a la mía (un txt fijo). Te paso tal cual lo he montado al final:
MONTAJE
BAT mount
diskpart /s mount.txt
exit

TXT mount
list disk
select disk 7
list partition
select partition 1
assign letter=E
exit


DESMONTAJE
BAT desmount
diskpart /s desmount.txt
exit

TXT desmount
list disk
select disk 7
list partition
select partition 1
remove letter=E
exit


Como ves lo he hecho con 2 TXT y 2 BAT lo he terminado haciendo así porque de la otra forma corría el riesgo de desmontar una unidad ya montada
(imagínate que por lo que sea la unidad ya estaba montada antes incluso de ejecutas COBIAN si lo hacia a tú forma COBIAN habría desmontado la unidad al ejecutar el BAT "pre-copia" porque en esencia al hacerlo a tú forma había un único archivo BAT con la función tanto de montaje como de desmontaje y eso habría provocado errores si se presupone que por el motivo que sea la unidad ya estaba montada antes incluso de la ejecución de COBIAN.)

Bien sea como fuere la cuestion es que ejecutando mount y desmount manualmente la unidad se monta y se desmonta correctamente.
Pero si lo hago desde COBIEN introduciendo un: "EXECUTE,D:\mount.bat," como digo pese a Ejecutarse "mount.bat" la unidad ni se monta ni se desmonta.

Saludos
Perfect Ardamax escribió:Cobian se esta ejecutando en mi usuario (soy admin)

Estarás ejecutando el programa en un usuario con privilegios pero si no lo ejecutas COMO ADMINISTRADOR (Click derecho > Ejecutar como administrador) no vas a hacer nada.
@Perfect Ardamax
Es que lo que haces tu no le veo logica. Lo de una unidad que puede ser asignada a otra cosa, vale, asigna un directorio al disco C:\MNT\BACKUP en vez de unidad, y comprueba si existe algun archivo dentro, si no, montas, si existe, desmontas (o usa una unidad q sepas nunca se asigna, W, Z, etc)

Lo de crear dinamicamente el txt es porque dijistes que no querias archivos extras


Sobre lo de admin, no me contestastes si la creacion del txt es satisfactoria. Si el txt se crea bien, puede ser problema de permisos del diskpart, elevalo con runas en el batch
@largeroliker
No lo mencione porque me parecía obvio.....OBVIAMENTE LA EJECUCIÓN ES COMO ADMINISTRADOR [sonrisa] [sonrisa]

@theelf
La creacion del txt efectivamente es satisfactoria con todos y cada uno de los comandos.

Respecto a lo de la unidades creo que no nos hemos entendido veras:
Cobian lleva 2 opciones:
a) ejecutar cosas pre-backup
b) ejecutar cosas post-backup

Si yo lo hacia a tú forma (el mismo BAT para el montaje y desmontaje) eso implcaba que en Cobian tenia que poner 2 veces el mismo archivo tanto en pre-backup como en post-backup
¿problema de esto? sencillo pues si por el motivo que sea la unidad esta montada (por que la he necesitado montar para algo) lo que ocurriría seria
Cobian se ejecuta y como evento pre-backup ejecuta el BAT este detecta que la unidad ya esta montada y la desmonta acto seguido Cobian da error porque el directorio en el cual se iba a realizar la copia ya no existe (debido a que ha sido desmontado).

En resumen de la forma en que tú lo hiciste el "goto" implica que la unidad debe estar "desmontada siempre" para así poder montarla (pre.backup) y desmontarla (post-backup) si por algún casual estuviera montada de antemano entonces al ejecutar el BAT saltaría directamente al goto provocando que en "pre-backup" hiciese el "desmontaje" de la unidad en lugar del "montaje" supuesto...lo que a su vez desencadenaría un error de copia.

¿me he explicado ahora mejor?
Es por eso que para prevenir esa eventualidad cree 2 ficheros separados uno para el "pre-backup" y otro para el "post-backup"

Lo de la creación dinámica es buena idea pero la idea que tenia era poner esos archivos como "protegidos por el sistema operativo" de tal forma que no se muestren a simple vista. Asi pues si quiero que el txt se mantenga con esa propiedad no puedo eliminarlo de hay que sea mejor mantenerlo fijo.


elevalo con runas en el batch


Sobre esto ultimo no tengo ni idea de como hacerlo es mas me suena a que runas se usaban en los viejos (W95-98) cayeron totalmente en desuso en XP
De todas formas ¿seria algo asi?
runas / usuario: "Perfect Ardamax" D: \ mount.bat
Por añadir más cosas, siempre puedes condicionar la ejecución del script basándote en la existencia de un fichero o unidad usando la condición IF EXIST.
IF EXIST "B:\" GOTO :UNMOUNT


Y si necesitas forzosamente la ejecución del script en modo administrador, también puedes basarte en NET SESSION
:CHECK_PERMISSIONS
NET SESSION >nul 2>&1
IF NOT %ERRORLEVEL% == 0 (
   ECHO You should run this script with administrator privileges
   ECHO.
   PAUSE
   EXIT
)
14 respuestas