choice - Permitir al usuario elegir
Al usar el símbolo del sistema o archivos por lotes, a menudo es necesario recibir entradas del usuario para bifurcar el procesamiento.
Sin embargo, permitir entradas libres puede causar errores debido a entradas no intencionadas.
En esta página se presenta el uso básico y ejemplos del comando choice, que solo acepta las teclas que se especifiquen.
¿Qué es el comando choice?
El comando choice muestra un mensaje que solicita al usuario pulsar una de las teclas especificadas y permite bifurcar el procesamiento según la tecla pulsada.
El uso básico del comando choice es el siguiente:
choice [/c <teclas>] [/n] [/cs] [/t <segundos> /d <tecla predeterminada>] [/m <mensaje>]
También se puede usar sin opciones, en cuyo caso se verá de la siguiente manera:
La tecla pulsada se almacena en la variable %errorlevel% como un número que indica su posición entre las opciones. Se explica en detalle más adelante.
Opciones del comando choice
El comando choice tiene las siguientes opciones:
| Opción | Descripción |
|---|---|
/c <teclas> | Especifica las teclas que el usuario puede elegir. El valor predeterminado es YN (Y: sí, N: no). |
/n | No muestra las opciones ([Y,N]?) después del mensaje. |
/cs | Distingue entre mayúsculas y minúsculas en las teclas. De forma predeterminada no se distinguen. |
/t <segundos> | Segundos (0 a 9999) que se esperan antes de seleccionar automáticamente la opción predeterminada si no se introduce nada. Debe usarse junto con /d. |
/d <tecla> | Especifica la tecla que se selecciona al agotarse el tiempo. Debe ser una de las teclas de /c y usarse junto con /t. |
/m <cadena> | Especifica el mensaje que se muestra en el aviso. |
Si no se especifica /t, el comando espera indefinidamente hasta que el usuario pulse una tecla.
Uso específico del comando choice
Bifurcar el procesamiento según la elección del usuario
El uso más básico del comando choice es bifurcar el procesamiento según la elección del usuario.
En el siguiente código de ejemplo, si el usuario pulsa Y se muestra Yes, y si pulsa N se muestra No.
@echo off
setlocal
choice /c YN /m "Yes or No?"
if %errorlevel% == 1 (
echo Yes
) else (
echo No
)
endlocal
Al ejecutar el archivo por lotes anterior, se muestra lo siguiente:

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超 入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
Si el usuario pulsa Y, se muestra lo siguiente:
Obtener la selección desde %errorlevel%
El comando choice almacena en %errorlevel% no la tecla en sí, sino la posición (empezando por 1) de la tecla elegida entre las especificadas en /c.
Por ejemplo, con /c YN, elegir Y da 1 y elegir N da 2. Con /c ABC, A es 1, B es 2 y C es 3.
Si el usuario interrumpe con Ctrl + C, el valor es 0.
Cuando hay tres o más opciones, combinarlo con goto mantiene la bifurcación legible.
@echo off
setlocal
choice /c ABC /m "Elija una acción. [A:Copiar, B:Mover, C:Cancelar]"
if %errorlevel% == 1 goto copy
if %errorlevel% == 2 goto move
goto end
:copy
echo Se ejecuta la copia.
goto end
:move
echo Se ejecuta el movimiento.
:end
endlocal
El valor de %errorlevel% se sobrescribe al ejecutar otros comandos. Compruébalo justo después de choice o guárdalo en una variable antes de usarlo.
Mostrar un mensaje y opciones personalizados
Combinando las opciones /c y /m se puede mostrar un mensaje y opciones personalizados.
En el siguiente código de ejemplo, se pide al usuario que elija su fruta favorita y se muestra la fruta seleccionada.
@echo off
setlocal
choice /c AB /m "Elija su fruta favorita. [A: Manzana, B: Plátano]"
if %errorlevel% == 1 (
echo Manzana
) else (
echo Plátano
)
endlocal
Al ejecutar el archivo por lotes anterior, se muestra lo siguiente:
Habilitar el tiempo de espera
Combinando las opciones /t y /d, se puede seleccionar automáticamente la opción predeterminada si no hay entrada durante cierto tiempo.
En el siguiente código de ejemplo, las opciones Y/N se muestran durante 5 segundos y, si no se elige ninguna, se selecciona N y se muestra No.
@echo off
setlocal
choice /c YN /t 5 /d N /m "Yes or No?"
if %errorlevel% == 1 (
echo Yes
) else (
echo No
)
endlocal
Al ejecutar el archivo por lotes anterior, si se pulsa una tecla el proceso se ejecuta como de costumbre, pero si no se introduce nada durante 5 segundos, se muestra No de la siguiente manera:
Prueba de confirmación
Por último, pongamos a prueba lo aprendido.
La prueba se completa en el lado del cliente, por lo que no se envían datos al servidor.