503 Stimmen

Wie kann ich in Windows cmd nach Benutzereingaben fragen und das Ergebnis in einem anderen Befehl verwenden?

Ich habe eine Windows-Bat-Datei, die Benutzereingaben annehmen und dann die Ergebnisse dieser Eingaben als Teil des Aufrufs weiterer Befehle verwenden soll.

Ich möchte zum Beispiel eine Prozess-ID vom Benutzer akzeptieren und dann jstack mit dieser ID ausführen und die Ergebnisse des jstack-Aufrufs in eine Datei schreiben. Wenn ich dies jedoch versuche, funktioniert es nicht.

Hier ist der Inhalt meiner Beispiel-Bat-Datei:

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

und hier ist, was in jstack.txt angezeigt wird:

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

3 Stimmen

"

1 Stimmen

Hat eine dieser Antworten nicht funktioniert? Wenn nicht, haben Sie eine Lösung gefunden? Wenn ja, wäre es hilfreich, wenn Sie sie hier als Selbstauskunft posten würden.

1 Stimmen

Wenn Sie feste Optionen für die Eingabe wünschen, ist es besser, wenn Sie choice als set /p

9voto

Es gibt keinen dokumentierten /prompt-Parameter für SETX, wie es ihn für SET gibt.

Wenn Sie eine Umgebungsvariable abfragen müssen, die einen Neustart übersteht, können Sie SETX verwenden, um sie zu speichern.

Eine mit SETX erstellte Variable kann erst nach einem Neustart der Eingabeaufforderung verwendet werden. Praktischerweise können Sie jedoch eine Variable, die bereits SETX ist, auch dann SETXen, wenn sie denselben Namen hat.

Dies funktioniert bei mir unter Windows 8.1 Pro:

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

(Die Anführungszeichen um die vorhandene Variable sind notwendig.)

Mit diesem Verfahren können Sie die temporäre SET-Variable während der aktuellen Sitzung verwenden und die SETX-Variable beim Neustart des Computers oder der CMD-Eingabeaufforderung wieder verwenden.

(Bearbeitet, um Code-Absätze richtig zu formatieren.)

9voto

npocmaka Punkte 52753

Sie können es auch mit userInput.bat die das Element html input verwendet.

enter image description here

Dadurch wird die Eingabe dem Wert jstackId zugewiesen:

call userInput.bat jstackId
echo %jstackId%

Dies wird nur den Eingabewert ausgeben, den Sie eventuell mit FOR /F :

call userInput.bat

8voto

Anisha Gupta Punkte 81
@echo off
:start
set /p var1="Enter first number: "
pause

6voto

pashute Punkte 3781

Es gibt zwei Möglichkeiten.

  1. Sie haben vergessen, die %id% で、その jstack anrufen.

    jstack %id% > jstack.txt

Die gesamte korrekte Batch-Datei sollte also lauten:

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

Und/Oder 2. Sie haben es zwar in den Code eingebaut (und vergessen, uns das in der Frage mitzuteilen), aber beim Ausführen der Batch-Datei haben Sie die Eingabetaste gedrückt, anstatt eine ID (z. B. 1234) einzugeben.

Was jetzt geschieht, ist das Ergebnis dieser beiden Fehler: jstack soll mit der von Ihnen angegebenen id aufgerufen werden.

Aber in Ihrem Fall (laut dem Code, den Sie in der Frage angegeben haben) haben Sie ihn ohne Variable aufgerufen. Du hast geschrieben:

jstack > jstack.txt

Wenn Sie also jstack ohne Variable wird folgendes ausgegeben:

Terminate batch file Y/N? 

Ihr zweiter Fehler ist, dass Sie die Eingabetaste gedrückt haben, anstatt einen Wert einzugeben, als das Programm Sie fragte: Enter ID: . Hätten Sie an dieser Stelle eine ID eingegeben, z. B. 1234, würde die %id% wird zu diesem Wert, in unserem Fall 1234. Sie haben jedoch KEINEN Wert eingegeben und stattdessen die Eingabetaste gedrückt. Wenn Sie der Variablen keinen Wert zuweisen und wenn die Variable vorher nicht auf einen anderen Wert gesetzt war, dann wird die Variable %id% wird auf die Eingabeaufforderung der set Befehl!! Und jetzt %id% wird eingestellt auf Enter ID: die wie in der Stapeldatei gefordert auf dem Bildschirm ausgegeben wurde, BEVOR Sie den jstack aufgerufen haben.

Aber ich vermute, dass Sie die jstack %id% > jstack.txt in Ihrem Batch-Datei-Code mit der %id (und ihn versehentlich in der Frage ausgelassen), und dass Sie die Eingabetaste gedrückt haben, ohne eine ID einzugeben. Das Stapelverarbeitungsprogramm gab dann die ID aus, die jetzt "Enter ID:" lautet, und führte dann jstack Enter ID: > jstack.txt

Jstack selbst verfolgte die Eingabe, stieß auf einen Fehler und forderte zum Beenden auf.
Und all dies wurde in die Datei jstack.txt geschrieben.

5voto

Werdna Punkte 51

Ich habe ein kleines cmd, das ich verwende, wenn ich einen PC für einen Kunden vorbereite: Es fordert den Benutzer zur Eingabe auf und benennt den PC entsprechend um.

@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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X