usuario tengo soy sesion permisos invitado iniciar habilitar entrar desde cuenta crear como administrador activar windows batch-file prompt

tengo - En Windows cmd, ¿cómo solicito la entrada del usuario y uso el resultado en otro comando?



iniciar sesion como administrador windows 10 (12)

Tengo un archivo .bat de Windows que me gustaría aceptar la entrada del usuario y luego usar los resultados de esa entrada como parte de la llamada a comandos adicionales.

Por ejemplo, me gustaría aceptar un ID de proceso del usuario y luego ejecutar jstack contra ese ID, poniendo los resultados de la llamada jstack en un archivo. Sin embargo, cuando intento esto, no funciona.

Aquí está el contenido de mi archivo de muestra de bat:

@echo off set /p id=Enter ID: echo %id% jstack > jstack.txt

y esto es lo que aparece en jstack.txt:

Enter ID: Terminate batch job (Y/N)?


Acabo de añadir el

set /p NetworkLocation= Enter name for network? echo %NetworkLocation% >> netlist.txt

secuencia a mi trabajo por lotes de netsh. Ahora me muestra la ubicación a la que respondo como el punto para esa muestra. Continuamente >> el archivo de salida, así que ahora sé "hogar", "trabajo", "Starbucks", etc. Buscando el aire libre, puedo evadir los canales de uso más bajo y si hay 5 o solo WLAN de 2.4 MHz.


Hay dos posibilidades.

  1. Olvidaste poner el %id% en la llamada jstack .

    jstack %id% > jstack.txt

Así que todo el archivo por lotes correcto debería ser:

@echo off set /p id=Enter ID: echo %id% jstack %id% > jstack.txt

Y / O 2. Lo puso en el código (y se olvidó de decirnos en la pregunta) pero cuando ejecutó el archivo por lotes presionó la tecla Intro en lugar de escribir una ID (por ejemplo, 1234).

Lo que está sucediendo es el resultado de estos dos errores: se supone que jstack debe llamarse con el id que le proporcionas.

Pero en su caso (de acuerdo con el código que proporcionó en la pregunta) lo llamó sin ninguna variable. Tu escribiste:

jstack > jstack.txt

Entonces, cuando ejecutas jstack sin variable, genera lo siguiente:

Terminate batch file Y/N?

Su segundo error es que presionó Entrar en lugar de dar un valor cuando el programa le preguntó: Enter ID: Si hubiera puesto una ID en este punto, digamos 1234, la variable %id% se convertiría en ese valor, en nuestro caso 1234. Pero NO proporcionó un valor y en su lugar presionó Enter. Cuando no le da ningún valor a la variable, y si esa variable no se configuró a nada más antes, entonces la variable %id% se establece en el indicador del comando set !! Así que ahora %id% se establece en Enter ID: que se hizo eco en su pantalla como se solicitó en el archivo por lotes ANTES de llamar al jstack.

Pero sospecho que jstack %id% > jstack.txt el jstack %id% > jstack.txt en el código de tu archivo de lote con el %id (y lo omitiste por error de la pregunta), y que presionas Enter sin escribir un ID. El programa por lotes luego hizo eco de la identificación, que ahora es "Ingresar ID:", y luego ejecutó jstack Enter ID: > jstack.txt

Jstack se hizo eco de la entrada, encontró un error y pidió terminar.
Y todo esto fue escrito en el archivo jstack.txt.


La sintaxis es como tal: set /p variable=[string]

Visite http://commandwindows.com/batch.htm o http://www.robvanderwoude.com/userinput.php para una inmersión más profunda en la entrada del usuario con las diferentes versiones de los archivos por lotes del sistema operativo Windows.

Una vez que haya establecido su variable, puede usarla de la siguiente manera.

@echo off set /p UserInputPath=What Directory would you like? cd C:/%UserInputPath%

note la sintaxis de %VariableName%


Los signos de dólar alrededor de la variable no funcionan en mi máquina Vista, pero los signos de porcentaje sí funcionan. También tenga en cuenta que un espacio al final en la línea "set" aparecerá entre la solicitud y la entrada del usuario.


No estoy seguro si este es el caso de todas las versiones de Windows, sin embargo, en la máquina XP que tengo, necesito usar lo siguiente:

set /p Var1="Prompt String"

Sin la cadena de mensajes entre comillas , obtengo varios resultados según el texto.


No hay ningún parámetro documentado / indicador para SETX como lo hay para SET.

Si necesita solicitar una variable de entorno que sobrevivirá a los reinicios, puede usar SETX para almacenarla.

Una variable creada por SETX no podrá utilizarse hasta que reinicie el símbolo del sistema. Sin embargo, perfectamente, puede establecer una variable que ya haya sido establecida, incluso si tiene el mismo nombre.

Esto funciona para mí en Windows 8.1 Pro:

set /p UserInfo= "What is your name? " setx UserInfo "%UserInfo%"

(Las comillas alrededor de la variable existente son necesarias.)

Este procedimiento le permite usar la variable temporal creada por SET durante la sesión actual y le permitirá reutilizar la variable creada por SETX al reiniciar la computadora o al reiniciar el indicador de CMD.

(Editado para dar formato a los párrafos de código correctamente.)


Sólo para mantener un valor predeterminado de la variable. Presione Entrar para usar el valor predeterminado de la ejecución reciente de su .bat:

@echo off set /p Var1=<Var1.txt set /p Var1="Enter new value ("%Var1%") " echo %Var1%> Var1.txt rem YourApp %Var1%

En la primera ejecución, simplemente ignore el mensaje sobre la falta de archivo con el valor inicial de la variable (o cree el Var1.txt manualmente).


Tengo un pequeño cmd que uso cuando preparo la PC para los clientes: llama al usuario para que ingrese información, y le cambiamos el nombre a la PC.

@ECHO "remember to run this as admin." @ECHO OFF SET /P _inputname= Please enter an computername: @ECHO Du intastede "%_inputname%" @ECHO "The pc will restart after this" pause @ECHO OFF wmic computersystem where name="%COMPUTERNAME%" call rename name="%_inputname%" shutdown -r -f


Prueba esto:

@echo off set /p id="Enter ID: "

Luego puede usar %id% como parámetro para otro archivo de jstack %id% lotes como jstack %id% .

Por ejemplo:

set /P id=Enter id: jstack %id% > jstack.txt


@echo off :start set /p var1="Enter first number: " pause


@echo off set /p input="Write something, it will be used in the command "echo"" echo %input% pause

Si consigo lo que quieres, esto funciona bien. También puedes usar% input% en otros comandos.

@echo off echo Write something, it will be used in the command "echo" set /p input="" cls echo %input% pause


set /p choice= "Please Select one of the above options :" echo ''%choice%''

El espacio después de = es muy importante.