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       8 = Gris
1 = Azul        9 = Azul claro
2 = Verde       A = Verde claro
3 = Aguamarina  B = Aguamarina claro
4 = Rojo        C = Rojo claro
5 = Púrpura     D = Púrpura claro
6 = Amarillo    E = Amarillo claro
7 = Blanco      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

Gracias por tu tiempo y lectura te invito a dejar un comentario en esta publicación y compartir mis contenidos en tus redes sociales o bien puedes seguirme a travéz de mi Twitter @lm_blog y nuestra página en Facebook Libertad Máxima Weblog (LMW) También puedes suscribirte a nuestra Noticias RSS por correo electrónico para no perderte ninguna noticia de este blog. Hasta pronto!

30 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. Buen post me a ayudado...
    Estoy aprendiendo

    ResponderEliminar
  3. 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
  4. 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
  5. 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
  6. quisiera saber si puedo selecionar multiples opciones para que se ejecuten una tras otra

    ResponderEliminar
  7. 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
  8. 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
  9. 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
  10. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  11. 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
  12. 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