¿Cómo leer la entrada de la consola en un archivo por lotes?

82

¿Cómo leo la entrada de la consola en un archivo por lotes? Lo que estoy tratando de lograr es la funcionalidad de scanf en C. ¿Cómo puedo hacer lo mismo en un archivo por lotes?

Nohsib
fuente
@ Raymond: No, la pregunta es leer varios caracteres como una cadena desde el teclado a una variable.
Nohsib
El comando set /plee lo que escriba el usuario, ya sea una letra o varias.
Raymond Chen
@ Raymond: ¿podría compartir un fragmento de código sobre eso?
Nohsib

Respuestas:

141

El fragmento de código en el duplicado propuesto vinculado lee la entrada del usuario.

ECHO A current build of Test Harness exists.
set /p delBuild=Delete preexisting build [y/n]?: 

El usuario puede escribir tantas letras como desee y entrará en la variable delBuild.

Raymond Chen
fuente
35
Nota: puede utilizar la entrada del usuario con%delBuild%
Jacob
1
Tenga en cuenta que echo !delBuild!le dará una salida más confiable en la ejecución cuando setlocal EnableDelayedExpansion
esté
29

Si está buscando rápidamente mantener una instancia de cmd abierta en lugar de salir de inmediato, simplemente hacer lo siguiente es suficiente

set /p asd="Hit enter to continue"

al final de su secuencia de comandos y mantendrá la ventana abierta.

Tenga en cuenta que esto se configurará asdcomo una variable de entorno y se puede reemplazar con cualquier otra cosa.

TankorSmash
fuente
15
para ello, alguien inventó el pausecomando. También lo es set /p, no set \p.
Stephan
6
"Como todo el mundo está diciendo", implica que la respuesta ya está dada, por lo que otra sin más información es innecesaria
jeb
1
@jeb tienes razón. mi problema era que incluían variables y eco, mientras que yo no necesitaba nada de eso. Me tomó uno o dos minutos analizar sus respuestas, ya que no tengo experiencia por lotes. Creo que mi respuesta satisface la mínima respuesta adecuada a mis necesidades.
TankorSmash
@ Stephan gracias amigo, en ambos aspectos. Estaba buscando una forma de mantener la instancia de cmd para salir después de que se completara un script, simplemente hacer una pausa durante X tiempo no era suficiente.
TankorSmash
@ArslanAhmad Acabo de probar, todavía funciona cmd, pero no con Powershell. Asegúrate de usar lo correcto.
TankorSmash
18

Además de la respuesta existente, es posible establecer una opción predeterminada de la siguiente manera:

echo off
ECHO A current build of Test Harness exists.
set delBuild=n
set /p delBuild=Delete preexisting build [y/n] (default - %delBuild%)?:

Esto permite a los usuarios simplemente presionar "Enter" si quieren ingresar el valor predeterminado.

Richard Williams
fuente