Título: [APORTE] [BATCH] Automatizar apertura de volumen y baúl cifrado v2.2
Publicado por: cyberalejo17 en 19 Abril 2014, 23:14 pm
Buenas tardes, Les quiero compartir un script que desarrollé hace poco. Se trata de una pequeña aplicación que automatiza la tarea de montar un volumen cifrado de TrueCrypt (permite seleccionar si se desea montar en modo sólo lectura o no), y abrir un baúl de contraseñas de KeePass almacenado dentro de ese volumen cifrado. Modifico el post, para publicar la actualización del script. La versión 2.2. :: Name: Abrir_USB.cmd :: Author: CyberAlejo17 :: Description: Script para abrir una memoria USB cifrada y un baul de contrasennias. :: Version: 2.2 :: Tree: :: F:\ :: | Abrir_USB.cmd :: | :: +---PENDRIVE :: \---TC :: | CYBERALEJO17-TC.tc :: | truecrypt-x64.sys :: | TrueCrypt.exe :: | truecrypt.sys :: | :: \---setup :: TrueCrypt Setup 7.1a.exe :: T:\ :: | :: +---PERSONAL :: | \---Seguridad :: | | PasswdDatabase.kdbx :: | | :: | \---Software :: | | KeePass.chm :: | | KeePass.config.xml :: | | KeePass.exe :: | | KeePass.XmlSerializers.dll :: | | KeePassLibC32.dll :: | | KeePassLibC64.dll :: | | ShInstUtil.exe :: | | :: | \---XSL :: | KDBX_DetailsFull.xsl :: | KDBX_DetailsLite.xsl :: | KDBX_PasswordsOnly.xsl :: | KDBX_Styles.css :: | KDBX_Tabular.xsl :: | TableHeader.gif :: | :: \---UNIVERSIDAD :: \---Cursos 2014-1 :: CALIFICACIONES-TC.tc REM ========= REM VARIABLES REM ========= :: Ruta de la aplicacion TrueCrypt. set rutaTC=TC\TrueCrypt.exe if exist " %programfiles%\TrueCrypt\TrueCrypt.exe" set rutaTC= %programfiles%\TrueCrypt\TrueCrypt.exe :: Letra que va a tomar la unidad Principal. :: Letra que va a tomar la unidad Calificaciones. :: Ruta de la aplicacion KeePass dentro de la unidad Principal. set rutaKP=PERSONAL\Seguridad\Software\KeePass.exe :: Ruta del archivo cifrado de la unidad Principal. set rutaArchivoTC=TC\CYBERALEJO17-TC.tc :: Ruta del archivo cifrado de la unidad Calificaciones. set rutaArchivoCal=UNIVERSIDAD\Cursos 2014-1\CALIFICACIONES-TC.tc :: Ruta del baul de contrasennias. set rutaArchvoKP=PERSONAL\Seguridad\PasswdDatabase.kdbx REM ====== REM INICIO REM ====== :: Nos lleva a la seleccion del menu adecuado. REM ============== REM CODIGO GRAFICO REM ============== REM ===== REM Menus REM ===== :MENU_1:: Menu inicial. Es posible montar las unidades y abrir el baul. cls COLOR 07 MODE CON COLS=85 LINES=26 echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» echo ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ echo º 1 ) S¢lo lectura úúúúúúúúúúúº Monta la unidad principal en modo RO º echo º 2 ) Escritura úúúúúúúúúúúúúúº Monta la unidad principal en modo RW º echo º TC Calificaciones º º echo º 3 ) S¢lo lectura úúúúúúúúúúúº Monta la unidad principal en modo RW y la unidad º echo º º calificaciones el modo RO º echo º 4 ) Escritura úúúúúúúúúúúúúúº Monta la unidad principal en modo RW y la unidad º echo º º calificaciones el modo RW º echo º 5 ) Abrir ba£l úúúúúúúúúúúúúº Monta la unidad principal en modo RW e inicia el º echo º º ba£l de contrase¤as º echo º 6 ) Mostrar archivos ocultosº Mostrar las carpetas ocultas en la memoria º echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ :MENU_2:: Ya ha sido montada la unidad Principal. Permite montar la unidad Calificaciones, abrir el baul y desmontar unidades. cls COLOR 07 MODE CON COLS=85 LINES=23 echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» echo ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ echo º TC Calificaciones º º echo º 1 ) S¢lo lectura úúúúúúúúúúúº Monta la unidad calificaciones en modo RO º echo º 2 ) Escritura úúúúúúúúúúúúúúº Monta la unidad calificaciones en modo RW º echo º º (no garantiza RW ) º echo º 3 ) Abrir ba£l úúúúúúúúúúúúúº Inicia el ba£l de contrase¤as (no garantiza RW ) º echo º 4 ) Desmontar unidad %letraTC% úúúúúº Desmonta la unidad Principal º echo º 5 ) Mostrar archivos ocultosº Mostrar las carpetas ocultas en la memoria º echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ :MENU_3:: Ya ha sido montada la unidad Principal y abierto el baul. Permite montar la unidad Calificaciones, desmontar unidades y cerrar todo. cls COLOR 07 MODE CON COLS=85 LINES=21 echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» echo ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ echo º TC Calificaciones º º echo º 1 ) S¢lo lectura úúúúúúúúúúúº Monta la unidad calificaciones en modo RO º echo º 2 ) Escritura úúúúúúúúúúúúúúº Monta la unidad calificaciones en modo RW º echo º º (no garantiza RW ) º echo º 3 ) Cerrar ba£l úúúúúúúúúúúúº Cierra todos los ba£les º echo º 4 ) Cerrar y desmontar todo º Cierra los ba£les y desmonta todas las unidades º echo º 5 ) Mostrar archivos ocultosº Mostrar las carpetas ocultas en la memoria º echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ :MENU_4:: Ya ha sido montada la unidad Principal y Calificaciones. Permite abrir el baul y desmontar unidades. cls COLOR 07 MODE CON COLS=85 LINES=19 echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» echo ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ echo º 1 ) Abrir ba£l úúúúúúúúúúúúúº Inicia el ba£l de contrase¤as (no garantiza RW ) º echo º 2 ) Desmontar unidad %letraCal% úúúúúº Desmonta la unidad Calificaciones º echo º 3 ) Desmontar unidades úúúúúº Desmonta todas las unidades montadas previamente º echo º 4 ) Mostrar archivos ocultosº Mostrar las carpetas ocultas en la memoria º echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ : MENU_5:: Se ha montado la unidad Principal, Calificaciones y abierto el baul. Menu con las opciones para cerrar baul y desmontar unidades. cls COLOR 07 MODE CON COLS=85 LINES=18 echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» echo ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ echo º 1 ) Cerrar ba£l úúúúúúúúúúúúº Cierra todos los ba£les º echo º 2 ) Cerrar y desmontar %letraCal% º Cierra el ba£l y desmonta la unidad º echo º º Calificaciones º echo º 3 ) Cerrar y desmontar todo º Cierra los ba£les y desmonta todas las unidades º echo º 4 ) Mostrar archivos ocultosº Mostrar las carpetas ocultas en la memoria º echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ : MENU_6:: Advierte del preligro de la ejecucion de attrib. cls COLOR 4E MODE CON COLS=85 LINES=25 TITLE=Mostrar archivos y carpetas ocultas echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» echo º Mostrar archivos ocultos º echo ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ echo º +* ** *+ º ¨Desea proceder con la operaci¢n? º echo º +* *+ º Escriba: º echo º *********************** º º echo º + + + + + + + + + + + º OK º echo º A D V E R T E N C I A º º echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ REM ======== REM Mensajes REM ======== :MENSAJE_1:: Mensaje de espera a que se termine de montar el contenedor. cls COLOR 07 echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» echo º Esperando al contenedor... º echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ : MENSAJE_2:: Mensaje indicando el proceso de cierre del baul de contrasennias. cls COLOR 07 echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» echo º Cerrando ba£l... º echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ :MENSAJE_3:: Mensaje indicando el proceso de desmonte de la unidad Calificaciones. cls COLOR 07 echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» echo º Desmontando unidad %letraCal%... º echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ :MENSAJE_4:: Mensaje indicando el proceso de desmonte de la unidad Principal. cls COLOR 07 echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» echo º Desmontando unidad %letraTC%... º echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ :MENSAJE_5:: Mensaje de error cls COLOR 4E echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ :MENSAJE_6:: Mensaje indicando que no ha acabado el proceso de mostrar archivos ocultos. cls COLOR 07 echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» echo º Espere por favor... º echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ :MENSAJE_7:: Mensaje indicando que ha introducido una opción invalida. cls COLOR 07 echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ REM ================ REM CODIGO PRINCIPAL REM ================ REM ======== REM Opciones REM ======== :VERIFICACION:: Verifica si ya se monto la unidad, mostrando el menu correspondiente. TASKLIST | FIND /I "KeePass.exe" >nul && goto : OPCIONES_5 || goto : OPCIONES_4)TASKLIST | FIND /I "KeePass.exe" >nul && goto : OPCIONES_3 || goto : OPCIONES_2) else (goto : OPCIONES_1) :OPCIONES_1 set /p var= Seleccione una opci¢n (1-6 ) [1]: if %var%==3 (call : MONTAR_RW && goto : MONTAR_CAL_RO) if %var%==4 (call : MONTAR_RW && goto : MONTAR_CAL_RW) if %var%==6 (goto : OPCIONES_6) :OPCIONES_2 set /p var= Seleccione una opci¢n (1-5 ) [4]: if %var%==1 (goto : MONTAR_CAL_RO) if %var%==2 (goto : MONTAR_CAL_RW) if %var%==3 (goto : ABRIR_BAUL) if %var%==4 (goto : DESMONTAR_UNIDAD_PPL) if %var%==5 (goto : OPCIONES_6) :OPCIONES_3 set /p var= Seleccione una opci¢n (1-5 ) [4]: if %var%==1 (goto : MONTAR_CAL_RO) if %var%==2 (goto : MONTAR_CAL_RW) if %var%==3 (goto : CERRAR_BAUL) if %var%==4 (call : CERRAR_BAUL && goto : DESMONTAR_UNIDAD_PPL) if %var%==5 (goto : OPCIONES_6) :OPCIONES_4 set /p var= Seleccione una opci¢n (1-4 ) [3]: if %var%==1 (goto : ABRIR_BAUL) if %var%==2 (goto : DESMONTAR_UNIDAD_CAL) if %var%==3 (call : DESMONTAR_UNIDAD_CAL && goto : DESMONTAR_UNIDAD_PPL) if %var%==4 (goto : OPCIONES_6) :OPCIONES_5 set /p var= Seleccione una opci¢n (1-4 ) [3]: if %var%==1 (goto : CERRAR_BAUL) if %var%==2 (call : CERRAR_BAUL && goto : DESMONTAR_UNIDAD_CAL) if %var%==3 (call : CERRAR_BAUL && call : DESMONTAR_UNIDAD_CAL && goto : DESMONTAR_UNIDAD_PPL) if %var%==4 (goto : OPCIONES_6) :OPCIONES_6 set /p proceder= Por favor, confirme: if %proceder%==OK (goto : MOSTRAR_OCULTOS) REM ======== REM Acciones REM ======== :MONTAR_RO:: Montar unidad en solo lectura. START "Montar unidad RO" "%rutaTC%" /q background /l%letraTC% /e /m ro /m rm /v "%rutaArchivoTC%" :MONTAR_RW:: Montar unidad en modo escritura. START "Montar unidad RW" "%rutaTC%" /q background /l%letraTC% /e /m rm /v "%rutaArchivoTC%" :MONTAR_CAL_RO:: Montar unidad calificaciones en solo lectura. START "Montar unidad calificaciones RO" "%rutaTC%" /q background /l%letraCal% /e /m ro /m rm /v "%letraTC%:\%rutaArchivoCal%" :MONTAR_CAL_RW:: Montar unidad calificaciones en modo escritura. START "Montar unidad calificaciones RW" "%rutaTC%" /q background /l%letraCal% /e /m rm /v "%letraTC%:\%rutaArchivoCal%" :ABRIR_BAUL:: Abrir el baul de contrasennias. START "Cerrar baul" "%letraTC%:\%rutaKP%" --exit-all START "Abrir baul" "%letraTC%:\%rutaKP%" "%letraTC%:\%rutaArchvoKP%" :CERRAR_BAUL:: Cierra solo el baul de contrasennias TASKLIST | FIND /I "KeePass.exe" >nulSTART "Cerrar baul" "%letraTC%:\%rutaKP%" --exit-all ) :DESMONTAR_UNIDAD_CAL:: Desmonta la unidad Calificaciones. if exist " %letraCal%:/" (" %rutaTC%" /d %letraCal% /s /q && timeout 2 >nul) ) :DESMONTAR_UNIDAD_PPL:: Desmonta la unidad Principal. " %rutaTC%" /d %letraTC% /s /q && timeout 1 >nul) :MOSTRAR_OCULTOS:: Muestra los archivos ocultos de la memoria usb. attrib /s /d -r -a -h -s
Pueden descargar el script y unos archivos de ejemplo para que vean su funcionamiento en: https://mega.co.nz/#!I8RU0LwY!3L4aWlIuCZbsMAYM1OsNvXdZmwRZUQfxG_zdypro7Dk (https://mega.co.nz/#!I8RU0LwY!3L4aWlIuCZbsMAYM1OsNvXdZmwRZUQfxG_zdypro7Dk) La contraseña para el volumen y el baúl es: 12345 Algunas imágenes: (http://puu.sh/8vh9q.png)
(http://puu.sh/8vh6C.png)
(http://puu.sh/8vhei.png) Espero que les pueda resultar útil. PD. Agradezco a @Elektro por las pruebas y consejos.
Título: Re: [APORTE] [BATCH] Automatizar apertura de volumen y baúl cifrado v2.2
Publicado por: cyberalejo17 en 1 Mayo 2014, 23:37 pm
Me gustaría que lo probaran y que me dieran sus opiniones al respecto. Por favor.
Qué sería aconsejable modificar para que quedara mejor (más rápido, más fácil de entender, etc).
En la versión que les compartí faltan los comentarios de las opciones del menú, pero en la versión que tengo en mi memoria usb, ya aparecen.
El archivo CYBERALEJO17-TC.tc que es el contenedor Principal, me ocupa la totalidad menos una giga de mi memoria. Es decir, si es una de 8 GB, ese archivo tendrá un tamaño de 7 GB. Hago esto para dejar algo de espacio libre para almacenar por fuera de la partición cifrada (carpeta PENDRIVE).
El otro contenedor, donde están las calificaciones de los estudiantes, no pesa mas de 2 MB.
Título: Re: [APORTE] [BATCH] Automatizar apertura de volumen y baúl cifrado v2.2
Publicado por: Eleкtro en 2 Mayo 2014, 08:24 am
Las modificaciones que hiciste son excelentes, no se puede mejorar mucho más. Pero los menus: :OPCIONES_1 set /p var= Seleccione una opci¢n (1-6 ) [1]: if %var%==3 (call : MONTAR_RW && goto : MONTAR_CAL_RO) if %var%==4 (call : MONTAR_RW && goto : MONTAR_CAL_RW) if %var%==6 (goto : OPCIONES_6)
Podrías hacerlos dinámicos: (código corregido) :OPCIONES_1 Call :MENU_1 Set "Options={Goto :MONTAR_RO}; {Goto :MONTAR_RW}; {Call :MONTAR_RW,Goto :MONTAR_CAL_RO}; {Call :MONTAR_RW,Goto :MONTAR_CAL_RW}; {Call :MONTAR_RW,Goto :ABRIR_BAUL}; {Goto :OPCIONES_6}" Choice.exe /C "123456" /M "Seleccione una opci¢n (1-6) [1]" For /F "Tokens=%ErrorLevel%,* Delims=;" %%# In ('Echo "%Options%"') Do ( For /F "Tokens=2-3 Delims={,}" %%X In ('Echo "%%~#"') Do ((%%~X) && (%%~Y)) ) Call :MENSAJE_7 Timeout.exe 1 1>Nul Goto :OPCIONES_1
REM Esto lo puse solo para testear la llamada a las etiquetas... :MONTAR_RO Echo MONTAR_RO Pause&Exit
:MONTAR_RW Echo MONTAR_RW Exit /B 0 & REM Aquí usas un Call para llamar a este bloque, así que debes indicar un código de salida (0|1).
:MONTAR_CAL_RO Echo MONTAR_CAL_RO Pause&Exit ( Un pobre intento de simular un Array seteando una cadena delimitada, y poder simular también un índice de elementos del Array para poder acceder a un elemento indicando el índice con lo único que nos proporciona Batch para hacer algo semejante ...un For. ) EDITO: Añado otra solución alternativa, más simple: SetLocal EnableDelayedExpansion & REM Necesario para expandir la(s) variable(s).
:OPCIONES_1 Call :MENU_1
Set "Choice1=Goto :MONTAR_RO" Set "Choice2=Goto :MONTAR_RW" Set "Choice3=Call :MONTAR_RW;Goto :MONTAR_CAL_RO" Set "Choice4=Call :MONTAR_RW;Goto :MONTAR_CAL_RW" Set "Choice5=Call :MONTAR_RW;Goto :ABRIR_BAUL" Set "Choice6=Goto :OPCIONES_6"
Choice.exe /C "123456" /M "Seleccione una opci¢n (1-6) [1]" Set /A "ChoiceIndex=%ErrorLevel%" For /F "Tokens=1-2 Delims=;" %%X In ('Echo !Choice%ChoiceIndex%!') Do ((%%~X) && (%%~Y))
SetLocal DisableDelayedExpansion Call :MENSAJE_7 Timeout.exe 1 1>Nul Goto :OPCIONES_1
Qué sería aconsejable modificar para que quedara mejor (más rápido). Para que sea más rápido debes utilizar otro lenguaje distinto, si en algo destaca Batch es por su incompetencia y lentitud. Por ejemplo, en Batch debes usar una aplicación externa (Find.exe|Findstr.exe) para buscar patrones de cadenas en otra cadena (la salida de un comando), depender de la ejecucion y del tiempo de ejecución de otro exe y del código de salida que este mande para determinar que se encontró una cadena y/o una expresion regular ...eso ya de por si es una mier-da y es muy lento en comparación con cualquier otro lenguaje. Además, también dependes de otras aplicaciones como 'TaskList.exe', el cual no muestra una lista de procesos en Tiempo Real, por propia experiencia te puedo decir que a veces el comando tiene una demora de 10-15 segundos en actualizar la lista de procesos para mostrar el proceso que andas buscando, así que para obtener mayor eficacia en Batch podrías hacer una Query a las Classes de WMI utilizando (de nuevo) una aplicación externa, WMIC: Ej: ( WMIC.exe Process Where Name='KeyPass.exe' Get /Format:List | Find.exe "=" )1>NUL 2>&1 && (...) || (...) ...en cualquier otro lenguaje no necesitarías depender de ningún exe para verificar si un proceso está corriendo, podrías usar las Classes de WMI diréctamente, lo cual es más rápido sin duda. Como ya digo, tu Batch-Script no se puede mejorar mucho más, así está perfecto aunque le hagas alguna que otra pequeña modificación como las que he comentado. ¡Saludos!
Título: Re: [APORTE] [BATCH] Automatizar apertura de volumen y baúl cifrado v2.2
Publicado por: cyberalejo17 en 2 Mayo 2014, 22:19 pm
Muchas gracias!
Lo que comentas por el momento es desconocido para mi, así que ya tengo tarea.
De nuevo, gracias.
EDITO: Una pregunta, cambiando los menús por choise, todavía conservo la particularidad de la opción por defecto? que es lo que está como [1] en las opciones. Es decir, que no necesito escribir una opción (1-6), sino con sólo dar enter, sin haber introducido un número, se va a esa opción.
Se me ocurrió una nueva modificación, añadir la opción de extraer de forma automática la memoria USB cuando termine de desmontar y cerrar todas las unidades cifradas. Por ahora sólo he encontrado que puedo hacerlo con aplicaciones externas. http://quickandeasysoftware.net/software/usb-disk-ejector Utilizando el parámetro /REMOVETHIS
Título: Re: [APORTE] [BATCH] Automatizar apertura de volumen y baúl cifrado v2.2
Publicado por: Eleкtro en 3 Mayo 2014, 00:30 am
cambiando los menús por choise, todavía conservo la particularidad de la opción por defecto? que es lo que está como [1] en las opciones. Es decir, que no necesito escribir una opción (1-6), sino con sólo dar enter, sin haber introducido un número, se va a esa opción.
El comando Choice espera un UserInput (la interacción por parte del usuario) para seleccionar una opción entre las opciones que especificaste, por lo tanto no hay lugar para predefinir una opción porque el comando obliga a que una de las opciones se deba elegir... ...a menos que especifiques un tiempo de espera máximo y entonces si que puedes especificar también la opción por defecto al terminar el tiempo de espera. Lee la ayuda del comando. /T tiempo de espera Número de segundos de pausa antes de que se elija una opción predeterminada. Los valores permitidos están comprendidos entre 0 y 9999. Si se especifica 0, no habrá pausa y se seleccionará la opción predeterminada.
/D opción Especifica la opción predeterminada después de nnnn segundos. Carácter debe estar en el conjunto especificado de opciones por la opción /C y también debe especificarse nnnn con /T.
Ejemplo: Choice.exe /C "123" /M "Elige" /T 10 /D "3" (Echo %ErrorLevel%) & REM Resultado: '3'
añadir la opción de extraer de forma automática la memoria USB cuando termine de desmontar y cerrar todas las unidades cifradas. Por ahora sólo he encontrado que puedo hacerlo con aplicaciones externas. Nunca me he interesado por saber como "extraer" un dispositivo extraible de forma automatizada, pero si has encontrado un programa de terceros capaz de hacerlo eso significa que la API de Windows así se lo permite, así que debe haber alguna función en la WinAPI para hacerlo, desconozco cual ...pero la WinAPI olvídate de poder tocarla en Batch. EDITO: Lo encontré: CM_Request_Device_Eject function (http://msdn.microsoft.com/en-us/library/ff539806%28VS.85%29.aspx) + Info (http://www.pinvoke.net/default.aspx/setupapi.cm_request_device_eject), de hecho según he leido en este source (http://www.codeproject.com/Articles/13530/Eject-USB-disks-using-C)esa es la función que utiliza la aplicación 'USBEject' que mencionaste. Es muchísimo más dificil de lo que parece en un principio, hay que usar drivers, si esta fuera la única solución entonces preferiría depender de ese tal "USBEject". También se me ocurre que quizás en alguna Class (referente a los dispositivos extraibles y/o volúmenes) de WMI puedas invocar el comando (el cual desconozco el nombre, pero debería ser algo como "Eject/Extract") de ejecución del dispositivo (InvokeVerb("Eject")), eso sería más viable porque si encuentras información al respecto entonces puedes reproducirlo en Batch usando el comando WMIC. EDITO: Encontré algo parecido, escrito en PowerShell: $driveEject = New-Object -comObject Shell.Application $driveEject.Namespace(17).ParseName("E:").InvokeVerb("Eject") Fuente: http://sushihangover.blogspot.nl/2012/02/powershell-eject-local-or-remote.html Y lo mismo para VBS: For Each d in CreateObject("Scripting.FileSystemObject").Drives CreateObject("Shell.Application").Namespace(17).ParseName("E:\").InvokeVerb("Eject") Next
Fuente: http://forums.mydigitallife.info/threads/29412-VBScript-Fast-eject-disk-on-drives ...Se supone que el comando "Eject" sirve tanto para ejecutar CD-Roms como para extraer unidades extraibles, se supone. Y como última alternativa, con este comando puedes mostrar la ventana de extracción de dispositivos extraibles: rundll32.exe shell32.dll,Control_RunDLL hotplug.dll, @SystemDir
Saludos.
|