Tengo un archivo por lotes que automatiza la copia de un montón de archivos de un lugar a otro y viceversa. Lo único es que, en la medida en que me ayuda, sigo seleccionando accidentalmente ese comando de mi búfer de comandos y sobrescribiendo en masa los cambios no comprometidos.
¿Qué código necesitaría para mi archivo .bat para que diga "estás seguro" y me haga escribir "y" antes de ejecutar el resto del archivo? Si se escribe algo excepto "y", debería salir de la ejecución en esa línea.
Editar 27 de noviembre Ok, marqué esto sin respuesta de nuevo porque todavía no puedo resolverlo. Cuando llamo "salir"; Cierra cmd.exe que no es lo que quiero. Todo esto porque Windows implementó el búfer de comando de manera incorrecta [de manera diferente a lo que estoy acostumbrado al menos]
fuente
SET AREYOUSURE=N
antes del indicador para borrar la opción si ya ejecutó el script antes en esa ventana de comando. Sin él, el valor predeterminado seguirá siendo la opción seleccionada anteriormente.setlocal
y elendlocal
deberían encargarse de eso.%AREYOUSURE%
ya no existirá después delendlocal
.prueba el comando CHOICE , por ejemplo
fuente
El
choice
comando no está disponible en todas partes. Con las versiones más recientes de Windows, elset
comando tiene la/p
opción de obtener la entrada del usuariover
set /?
para más informaciónfuente
Hay dos comandos disponibles para las indicaciones del usuario en la línea de comandos de Windows:
/P
disponible en todas las versiones de Windows NT con extensiones de comando habilitados yset es un comando interno del procesador de comandos de Windows
cmd.exe
. La opción/P
de pedirle a un usuario una cadena está disponible solo con las extensiones de comando habilitadas que están habilitadas de manera predeterminada, ya que de lo contrario casi ningún archivo por lotes funcionaría hoy en día.choice.exe es una aplicación de consola separada (comando externo) ubicada en
%SystemRoot%\System32
.choice.exe
de Windows Server 2003 se puede copiar en el directorio%SystemRoot%\System32
de una máquina con Windows XP para su uso en Windows XP, como muchos otros comandos no disponibles de forma predeterminada en Windows XP, pero disponibles de forma predeterminada en Windows Server 2003.Es una buena práctica favorecer el uso de CHOICE sobre el uso de SET / P debido a las siguientes razones:
/C
(y Ctrl+C) y emite un pitido de error si el usuario presiona una tecla incorrecta.echo Y | call PromptExample.bat
el uso de CHOICE .cmd
debido a un error de sintaxis, o en la ejecución de comandos no incluidos en absoluto en el archivo por lotes en buen archivo por lotes codificado. Se necesitan algunos esfuerzos para conseguir que SET / P esté seguro contra un error o una entrada intencionalmente incorrecta del usuario.A continuación, se muestra un ejemplo rápido en el que se usa OPCIÓN preferida y, alternativamente, SET / P en
choice.exe
no disponible en computadoras usadas con Windows.Nota: Este archivo por lotes utiliza extensiones de comando que no están disponibles en Windows 95/98 / ME en
command.com
lugar decmd.exe
como intérprete de comandos.La línea de comando
set "UserChoice=!UserChoice: =!"
se agrega para que sea posible llamar a este archivo por lotesecho Y | call PromptExample.bat
en Windows NT4 / 2000 / XP y no requiere el uso deecho Y| call PromptExample.bat
. Elimina todos los espacios de la cadena leída desde STDIN antes de ejecutar las dos comparaciones de cadenas.echo Y | call PromptExample.bat
da como resultado que YSPACE se asigne a la variable de entornoUserChoice
. Eso resultaría en procesar el mensaje dos veces debido a"Y "
que no es igual a mayúsculas y minúsculas"N"
ni"Y"
sin eliminar primero todos los espacios. Entonces,UserChoice
con YSPACE como valor resultaría en ejecutar el mensaje por segunda vez con la opciónN
definida como predeterminada en el archivo por lotes en la segunda ejecución del mensaje, lo que a continuación da como resultado una salida inesperada del procesamiento del archivo por lotes. Sí, el uso seguro de SET / P es realmente complicado, ¿no?Para obtener aún más detalles sobre el uso de SET / P y CHOICE para solicitar al usuario una elección de una lista de opciones, consulte la respuesta sobre ¿Cómo evitar que el intérprete de comandos de Windows salga de la ejecución de archivos por lotes en una entrada de usuario incorrecta?
Algunas sugerencias más:
UserChoice
conN
yY
, sino el valor deUserChoice
rodeado por"
con"N"
y"Y"
.EQU
yNEQ
están diseñados principalmente para comparar dos enteros en el rango -2147483648 a 2147483647 y no para comparar dos cadenas.EQU
yNEQ
funciona también para las comparaciones de cadenas, pero resulta en comparar cadenas entre comillas dobles en un intento inútil de convertir la cadena izquierda en un entero.EQU
y soloNEQ
se puede usar con extensiones de comando habilitadas. Los operadores de comparación para las comparaciones de cadenas son==
ynot ... ==
que funcionan incluso con extensiones de comando deshabilitadas, ya que inclusocommand.com
MS-DOS y Windows 95/98 / ME ya las admitían. Para obtener más detalles sobre los operadores de comparación IF , consulte Símbolo equivalente a NEQ, LSS, GTR, etc. en archivos por lotes de Windows .goto :EOF
requiere extensiones de comando habilitadas para salir realmente del procesamiento de archivos por lotes. Para obtener más detalles, consulte ¿A dónde vuelve GOTO: EOF?Para comprender los comandos utilizados y cómo funcionan, abra una ventana de símbolo del sistema, ejecute allí los siguientes comandos y lea todas las páginas de ayuda que se muestran para cada comando con mucho cuidado.
choice /?
echo /?
endlocal /?
goto /?
if /?
set /?
setlocal /?
Ver también:
Explica la razón por la que se utiliza la sintaxis
set "variable=value"
al asignar una cadena a una variable de entorno.if errorlevel X
comportamiento y el operador&
.|
y manejan STDIN .SystemRoot
.fuente
CHOICE.COM
por defecto en MS-DOS 6.0, MS-DOS 7.0, Windows 95 y Windows 98. Pero no estabachoice.exe
instalada por defecto en Windows NT4, Windows 2000 y Windows XP.CHOICE.COM
también se podría usar en NT4, Windows 2000 y Windows XP, pero sería mejor usar 32 bitschoice.exe
del kit de recursos apropiado. Consulte la página de Rob van der Woude sobre CHOICE . Las opciones son en parte diferentes entreCHOICE.COM
ychoice.exe
. Sin embargo, la pregunta no es sobre DOS.Aquí un poco más fácil:
o
fuente
%errorlevel%
siempre es un valor entero. Consulte aquí la documentación que incluye un ejemplo.Este es mi método para obtener una respuesta sí / no .
También no distingue entre mayúsculas y minúsculas.
Esto solo verifica los errores dados por la entrada y establece la
choice
variable en lo que necesite para que pueda usarse a continuación en el código.fuente
Si desea que el programa por lotes vuelva al indicador y no cierre el indicador (también conocido como cmd.exe), puede usar "exit / b".
Esto puede ayudar.
O si no quieres usar tantas líneas ...
Espero que esto ayude...
fuente
Aquí hay un ejemplo simple que utilizo en un script de copia de seguridad (.bat / batch) en Windows 10, que me permite tener diferentes opciones al hacer copias de seguridad.
Puede tener tantos como necesite de estos bloques.
fuente
Primero, abre la terminal.
Luego, escriba
A continuación, abra .sure y pegue esto dentro.
Después de eso, cierre el archivo.
Esto le indicará si está seguro antes de continuar con el comando.
fuente
Terminal abierto. Escriba lo siguiente
Pega esto dentro de sure.sh
Cierre sure.sh y escriba esto en la terminal.
Ahora, si escribe sure antes de escribir el comando, le dará un mensaje de si está seguro antes de continuar con el comando.
¡Espero que esto sea útil!
fuente