Como crear un menú de selección multiple en Batch .bat .cmd

Hola amigos esta vez les traigo un ejemplo de como crear un menú de selección multiple en la consola de comandos de Windows, esto sirve para lanzar ilimitada cantidad de comandos o pequeñas aplicaciones creadas en Batch en archivos ejecutables con extensiones .bat y/o .cmd en el la consola de comados de Windows.


Este es un ejemplo de como podemos crear un menú con la carácteristica de realizar una acción a travéz
de la selección de un número en la consola de comandos CMD.exe en Windows, sencillo de usar, editar
y adaptar a tus necesidades, por ahora este menú nos hace cambios de colores del texto para entender el funcionamiento del código. Por ahora solamente este ejemplo lo que hace es cambiar el color del texto pero sirve para hacerte una idea de como se hace para llamar una función desde el menú.

@echo off
TITLE Bienvenid@ %USERNAME% a @lm_blog menu
MODE con:cols=80 lines=40

:inicio
SET var=0
cls
echo -----------------------------------------------------
echo  %DATE% ^| %TIME%
echo -----------------------------------------------------
echo  1    Opcion 1  
echo  2    Opcion 2  
echo  3    Opcion 3  
echo  4    Opcion 4  
echo  5    Opcion 5  
echo  6    Salir
echo -----------------------------------------------------
echo.

SET /p var= ^> Seleccione una opcion [1-6]:

if "%var%"=="0" goto inicio
if "%var%"=="1" goto op1
if "%var%"=="2" goto op2
if "%var%"=="3" goto op3
if "%var%"=="4" goto op4
if "%var%"=="5" goto op5
if "%var%"=="6" goto salir

::Mensaje de error, validación cuando se selecciona una opción fuera de rango
echo. El numero "%var%" no es una opcion valida, por favor intente de nuevo.
echo.
pause
echo.
goto:inicio

:op1
    echo.
    echo. Has elegido la opcion No. 1
    echo.
        ::Aquí van las líneas de comando de tu opción
        color 08
    echo.
    pause
    goto:inicio

:op2
    echo.
    echo. Has elegido la opcion No. 2
    echo.
        ::Aquí van las líneas de comando de tu opción
        color 09
    echo.
    pause
    goto:inicio

:op3
    echo.
    echo. Has elegido la opcion No. 3
    echo.
        ::Aquí van las líneas de comando de tu opción
        color 0A
    echo.
    pause
    goto:inicio
  
:op4
    echo.
    echo. Has elegido la opcion No. 4
    echo.
        ::Aquí van las líneas de comando de tu opción
        color 0B
    echo.
    pause
    goto:inicio

:op5
    echo.
    echo. Has elegido la opcion No. 5
    echo.
        ::Aquí van las líneas de comando de tu opción
        color 0C
    echo.
    pause
    goto:inicio

:salir
    @cls&exit


Los atributos de color están especificados con dos dígitos hex (el primero corresponde al segundo plano; el segundo al primer plano). Los dígitos pueden ser cualquiera de los siguientes valores:
 
0 = Negro 
1 = Azul                           
2 = Verde                         
3 = Aguamarina               
4 = Rojo                           
5 = Púrpura                      
6 = Amarillo                     
7 = Blanco
8 = Gris
9 = Azul claro
A = Verde claro
B = Aguamarina claro
C = Rojo claro
D = Púrpura claro
E = Amarillo claro
F = Blanco brillante
                      
INSTRUCCIONES:
  1. Abrir tu editor de texto favorito se recomienda Notepad.exe, Notepad++ entre otros.
  2. Copiar y pegar el código anterior.
  3. Editar y adaptar a tus necesidades.
  4. Guardar el archivo con la extensión .bat ó .cmd
 Sí necesitas más comando puedes consultar la lista que posee este ENLACE

Comentarios

  1. Muchas gracias... Se que con el goto se pueden hacer mas cosas, pero recién estoy aprendiendo...

    ResponderEliminar
    Respuestas
    1. Seguro que si mi estimado, hay muchas otras acciones que se pueden lograr, simpre hay algo nuevo que aprender :) que bien que ha sido de probecho este post!!

      Saludos!

      Eliminar
  2. EXCELENTE POST ME SSIRVIO MUCHO :D

    ResponderEliminar
  3. Buen post me a ayudado...
    Estoy aprendiendo

    ResponderEliminar
  4. Hola a mi me gustaria saber si podeis ayudarme con un ".bat"

    cls @Echo OFF
    title Folder Private
    if EXIST "HTG Locker" goto UNLOCK
    if NOT EXIST Private goto MDLOCKER
    :CONFIRM
    echo Are you sure you want to lock the folder(Y/N)
    set/p "cho=>"
    if %cho%==Y goto LOCK
    if %cho%==y goto LOCK
    if %cho%==n goto END
    if %cho%==N goto END
    echo Invalid choice.
    goto CONFIRM
    :LOCK
    ren Private "HTG Locker"
    attrib +h +s "HTG Locker"
    echo Folder locked
    goto End
    :UNLOCK
    echo Enter password to unlock folder
    set/p "pass=>"
    if NOT %pass%== ""CLAVE"" goto FAIL
    attrib -h -s "HTG Locker"
    ren "HTG Locker" Private
    echo Folder Unlocked successfully
    goto End
    :FAIL
    echo Invalid password
    goto end
    :MDLOCKER
    md Private
    echo Private created successfully
    goto End
    :End

    Con ese ocultas la carpeta que desees pero al ejecutarlo la clave es visible, sabriais de alguna manera para ponerla oculta??

    ResponderEliminar
    Respuestas
    1. Hola Ivan, ya e visto cual es el origen de este código pero de tal cual lo copiaste aquí no funciona del todo bien... :) necesita correcciones!

      Una manera de asegurarte de que no puedan ver tu contraseña dentro de este código dentro de un archivo .bat .cmd los cuales son fáciles de modificar se me ocurre rápidamente que busques (Google) y descargues "Quick Batch File Compiler" dentro de esta aplicación puedes compilar en un archivo .exe el cual no se puede ver el código una vez compilado.-

      Saludos!!

      Eliminar
  5. Buenas Carlos Soza.

    Muy buen aporte.

    Tienes alguna idea de como hacer para que luego de esto:

    set /p OPP=Elija una opcion (1 al 3):
    cls
    If "%OPP%"=="1" goto OP1
    If "%OPP%"=="2" goto OP2
    If "%OPP%"=="3" goto OP3
    If "%OPP%"=="4" goto OP4
    If "%OPP%"=="5" goto EXIT
    If "%OPP%"==""

    El valor de la variable [INTRODUCIDO POR EL USUARIO] se borre sin tener que cerrar la consola (CMD) una vez terminado el proceso. Sucede que despues que el usuario hace todo el proceso de lo que esta dentro de una de las opciones, al volver al INICIO, se puede presionar ENTER sin introducir ningun valor y simplemente se asume el valor que se introdujo la primera vez en ese paso.

    ResponderEliminar
    Respuestas
    1. Buenas Soluciones Prácticas!! y a quién lea :)

      Efectivamente, siempre se conserva el último valor introducido hasta cerrar completamente la consola CMD...

      Se me cocurre que al final de cada Subproceso re-asignes un nuevo valor de la variable OPP

      Es decir:

      @ECHO OFF
      :Menu
      cls
      echo ------------------------------------------------------------------------------
      echo 1 OP1
      echo 2 OP2
      echo 3 OP3
      echo S Cancelar
      echo ------------------------------------------------------------------------------
      echo %USERNAME%
      SET /p OPP=Elija un numero:

      If "%OPP%"=="1" goto OP1
      If "%OPP%"=="2" goto OP2
      If "%OPP%"=="3" goto OP3
      If "%OPP%"=="0" goto Menu
      If "%OPP%"=="S" goto Exit
      If "%OPP%"=="s" goto Exit

      echo.
      echo ERROR!
      echo Has introducido "%OPP%" comando desconocido . . .
      echo.
      SET OPP=0
      pause
      CLS
      goto:Menu

      :OP1
      echo.
      echo Esta es la opcion 1
      echo.

      SET OPP=0
      pause
      CLS
      goto:Menu

      :OP2
      echo.
      echo Esta es la opcion 2
      echo.

      SET OPP=0
      pause
      CLS
      goto:Menu

      :OP3
      echo.
      echo Esta es la opcion 3
      echo.

      SET OPP=0
      pause
      CLS
      goto:Menu

      Espero te sea útil a ti y a otros lectores, hasta pronto!

      Eliminar
  6. hola buenos Dias, tardes, o Noches
    sin querer molestar quiciera perdirles algo urgentemente necesito un el codigo para un menu con 8 paginas, con 8 items por cada pagina, y con retorno a menu prinsipal... si alguien pudiera ayudarme...

    de ante mano muchas gracias...

    ResponderEliminar
  7. quisiera saber si puedo selecionar multiples opciones para que se ejecuten una tras otra

    ResponderEliminar
  8. Hola consulta...
    En el codigo hay 1 parte cerca del inicio que menciona la utilizacion de fecha y hora, pero en la imagen no se muestra, o me equivoco o interprete de gorma incorrecta...
    De todas formas excelente aporta, desde ya muchas gracias.

    ResponderEliminar
    Respuestas
    1. Hola Pablo,

      Hace un tiempo se actualizó el código pero no la imágen... :)

      Eliminar
    2. ayudeme con el ejercicio q puse

      Eliminar
  9. Hola soy nuevo en esto, mi duda es que quisiera poder ocultar las opciones para que no se vean, solo que me de l as ociones del 1-6 pero donde dice opciones dejarlas ocultas, no se si me explique bien, agradeceria una respuesta, gracias.

    ResponderEliminar
    Respuestas
    1. Buenas.

      Solo tienes que quitar la instrucción [ECHO] lo que significa imprimir o mostrar en pantalla.

      Saludos.

      Cualquier duda deja tus lineas de codigo y te ayudamos a corregir los errores.

      Eliminar
  10. Hola, que buenos aportes.
    Quisiera realizar la consulta si puedo realizar un bat para realizar la copia de archivos desde una pc a varias terminales, y que copie solo archivos que se actualicen.

    ResponderEliminar
    Respuestas
    1. Hola Eder, un gusto saludarte por ahora tengo solamente referencia a mano en inglés aqui: https://ss64.com/nt/xcopy.html

      todo lo que necesitas en saber todo sobre el comando XCOPY

      mi ejemplo de bat sería!


      ECHO Respaldando Arqueos De Caja ...
      XCOPY "\\192.168.1.xxx\Arqueos de caja\" "D:\Mis documentos\Arqueos\" /A /E /K /D /Y /I /C

      PING LocalHost -n 3 -w 1000 >Nul rem espera 3 seg.

      @CLS&EXIT

      Recuerda tener los directorios compartidos con permisos correspondientes en tu red...
      Con esto me funciona muy bien a mi saludos!

      Eliminar
    2. Carlos, muchas gracias por tu respuesta.
      Tengo una inquietud, con xcopy reconocerá los archivos que se actualicen y solo copiara solo esos?, o copiara y chancara todos los archivos que tenga la carpeta. Obviamente lo que quiero es agilizar el copiado en red

      Eliminar
  11. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  12. Desarrolle un script para el sistema operativo windows que automatice lo siguiente:

    El script debe visualizar un menu con las siguientes opciones:

    1. crear estructura de directorio

    2. visualizar estructura de directorios

    3. Buscar en la estructura de directorios

    4. Operaciones de Eliminacion

    5. salir del menu de opciones

    si el usuario ingresa a la opcion 1 debe crear la siguiente estructura de directorios y archivos:

    d:\parcial2

    p1

    p11

    p12

    p121

    p122

    p1221

    p1222

    p1223

    p1224

    parcial.txt

    p13

    El archivo parcial.txt debe tener de contenido una breve explicacion de que son los archivos .bat y cual es la utilidad en windows.

    La opcion 2 debe visualizar toda la estructura de directorio completa.

    la opcion 3 de mostrar el siguiente submenu:

    3.1 listar todas las carpetas y subcarpetas de la carpeta principal "parcial2"

    3.2 listar de forma ordenada por nombre de archivo/directorio la carpeta principal "parcial2"

    3.3 listar de forma ordenada descendente por fecha de creacion archivo/directorio la carpeta principal "parcial2"

    3.4 Salir del submenu y volver al menu principal.

    la opcion 4 debe permitir eliminar un directorio que usted selecione.

    la opcion 5 debe terminar el programa.

    Debe tener en cuenta que no se puede ingresar una opcion que no este en las opciones validas del menu.

    debe entregar el codigo del script y pantallaso de la ejecucion.

    Exitos.

    ResponderEliminar
    Respuestas
    1. 1.- usar comando mkdir C:\mkdir parcial2\p1\p12\121\122 asi se crearan las carpetas que designes
      2.- usar comando cd C:\parcial2 para ingresar el directorio y usar el comando dir para listar los directorios y sub directorios
      3.- No sé que necesitas buscar?
      4.- para eliminar usar el comando rmdir /s C:\parcial2
      5.- usar el comando exit para cerrar la consola.

      Eliminar
  13. ayudenme por favor a resolver eso

    ResponderEliminar
  14. buenas tardes
    por favor me puedes ayudar como puedo hacer para que el programa de batch al abrir y darle la opción numero 1 me deje ingresar automáticamente al programa word

    ResponderEliminar
    Respuestas
    1. gracias por tu colaboracion

      Eliminar
    2. Hola justo despues de la Opción 1 agrega el siguiente comando:

      winword

      Eliminar
  15. hola me gustaria saber por que cuando quiero poner una opcion de "start https osea la pagina" no me inicia la pagina, al principio funciono pero despues de agregar la opcion dos no me dejo necesito ayuda por favor

    ResponderEliminar
  16. Hola!
    Antes del menú hice que pidiera una contraseña, mi script es este:
    @echo off
    title Menu
    color 0f
    :security
    set/p codigo= INGRESE EL CÓDIGO DE ACCESO

    if %codigo%==124152125 (goto access_allowed) else goto access_dennied

    :access_dennied
    cls
    color 0c
    echo ACCESO DENEGADO
    echo INTENTELO DE NUEVO
    pause
    goto security

    :access_allowed
    cls
    color 0a
    echo ACCESO PERMITIDO
    pause
    goto menu

    ¿Cómo le pongo límite de intentos? (si se requiere un programa específico (como Quick Batch File Compiler o similar) por favor diganme)

    ResponderEliminar
    Respuestas
    1. Declara una variable en 0 al inicio , luego en acces_dennied incrementa la variable en +1 y con un if else verifica si la variable es más grande que el número de intentos, de ser así lo envías a otro goto que de mensaje de error o cierre el script

      Eliminar
    2. Gracias Nicolás, no sé cómo no se me había ocurrido. Fuiste de gran ayuda.

      Eliminar
  17. Si quiero ejecutar programas de c++ como los agrego

    ResponderEliminar
  18. Muchas gracias, lo utilice para iniciar o detener la cola de impresion

    ResponderEliminar
  19. Buenas, necesitaría ayuda con un menú.
    Si pulsas 1, irá a op1.
    Si pulsas 5, irá a op5. Pero al volver a pulsar 1 en la primera parte del menu, irá a info1, en vez de a op1.
    Hay alguna forma?
    Muchas gracias

    ResponderEliminar
  20. Miraaaa!! años que no me pongo a hacer cosas con los .bat. cuando eramos chicos, con mi hermano haciamos archivos con esto y el comando choice, que era basicamentte lo mismo. terminamos haciendo un archivazo para jugar a los banqueros jaja. y mas adelante hice una agenda para archivar telefonos y direcciones todo en D.O.S. Una locura era eso, dias y dias escribiendo comandos. muy divertido. un tiempo lo usaba para escribir comandos simples para no tener que escribirlos, como los scaneos de discos, limpieza y mantenimiento, clonar discos y eso. perdi todo cuando se me quemo el disco. ahora me da paja escribir todo eso de nuevo. pero al ver esto ya me dieron ganas de empezar otra vez jaja. saludos, excelente post. a medida que vaya escribiendo todo lo voy a estar compartiendo. suerteee

    ResponderEliminar
  21. Muchas Gracias, intentaré adaptarlo a mis necesidades pero el trabajo ya está casi hecho!

    ResponderEliminar
  22. buenas tardes, gracias por el aporte lo adapte a las necesidades y funciona perfectamente, pero tengo una duda. Como puedo poner la ruta para que entre a una carpeta y ejecute el .exe

    ResponderEliminar
    Respuestas
    1. Si no mal recuerdo, podes usar el comando goto "ruta" y el comando start "programa.exe"
      Las dos opciones son válidas, igualmente te recomiendo que abras la consola de comandos y escribas "goto /?" para saber con detalle cómo funciona cada comando, la explicación está en el idioma que esté configurado tu pc.

      Eliminar

Publicar un comentario