it-swarm.com.de

Wie fordere ich in Windows Cmd zur Benutzereingabe auf und verwende das Ergebnis in einem anderen Befehl?

Ich besitze eine Windows-BAT-Datei, die ich als Benutzereingabe akzeptieren und dann die Ergebnisse dieser Eingabe als Teil des Aufrufs zusätzlicher Befehle verwenden möchte.

Zum Beispiel möchte ich eine Prozess-ID vom Benutzer akzeptieren und dann jstack für diese ID ausführen und die Ergebnisse des jstack-Aufrufs in eine Datei schreiben. Wenn ich das versuche, funktioniert es jedoch nicht.

Hier ist mein Beispiel für den Inhalt einer Fledermausdatei:

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

und hier ist was in jstack.txt auftaucht:

 ID eingeben: Stapeljob beenden (J/N)? 
348
marc

Versuchen Sie dies:

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

Sie können dann %id% als Parameter für eine andere Stapeldatei wie jstack %id% verwenden.

Zum Beispiel:

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

Die Syntax lautet wie folgt: set /p variable=[string]

Schauen Sie sich http://commandwindows.com/batch.htm oder http://www.robvanderwoude.com/userinput.php an, um mehr über Benutzereingaben mit zu erfahren die verschiedenen Versionen von Windows-Batchdateien.

Nachdem Sie Ihre Variable festgelegt haben, können Sie sie folgendermaßen verwenden.

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

beachten Sie die %VariableName% -Syntax

95
jayfessenden

Ich bin mir nicht sicher, ob dies für alle Windows-Versionen der Fall ist. Auf meinem XP Computer muss ich jedoch Folgendes verwenden:

set /p Var1="Prompt String"

Ohne den Prompt-String in Anführungszeichen erhalte ich je nach Text verschiedene Ergebnisse.

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

wenn ich bekomme, was Sie wollen, funktioniert dies gut. Sie können% input% auch in anderen Befehlen verwenden.

@echo off
echo Write something, it will be used in the command "echo"
set /p input=""
cls
echo %input%
pause 
14
fedeb
set /p choice= "Please Select one of the above options :" 
echo '%choice%'

Der Abstand nach = ist sehr wichtig.

14
hannad rehman
@echo off
:start
set /p var1="Enter first number: "
pause
8
Anisha Gupta

Es gibt keinen dokumentierten/Eingabeaufforderungsparameter für SETX wie für SET.

Wenn Sie nach einer Umgebungsvariablen fragen müssen, die einen Neustart übersteht, können Sie sie mit SETX speichern.

Eine von SETX erstellte Variable kann erst nach einem Neustart der Eingabeaufforderung verwendet werden. Ordentlich können Sie jedoch eine Variable SETX, die bereits SET ist, auch wenn sie den gleichen Namen hat.

Dies funktioniert für mich in Windows 8.1 Pro:

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

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

Mit dieser Prozedur können Sie die temporäre, von SET erstellte Variable während der aktuellen Sitzung verwenden und die von SETX erstellte Variable beim Neustart des Computers oder beim Neustart der CMD-Eingabeaufforderung wiederverwenden.

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

8

Ich habe ein wenig cmd, das ich verwende, wenn ich den PC für Clients vorbereite: Es ruft den Benutzer zur Eingabe auf und benennt den PC danach 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
5
Werdna

Es gibt zwei Möglichkeiten.

  1. Sie haben vergessen, den %id% in den jstack-Aufruf einzufügen.

    jstack %id% > jstack.txt
    

Die ganze richtige Batch-Datei sollte also sein:

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

Und/oder 2. Sie haben es in den Code eingegeben (und vergessen, es uns in der Frage mitzuteilen), aber als Sie die Batch-Datei ausgeführt haben, haben Sie die Eingabetaste gedrückt, anstatt eine ID einzugeben (z. B. 1234).

Was passiert, ist das Ergebnis dieser beiden Fehler: jstack soll mit der ID aufgerufen werden, die Sie angeben.

Aber in Ihrem Fall (gemäß dem Code, den Sie in der Frage angegeben haben) haben Sie es ohne Variable aufgerufen. Sie schrieben:

jstack > jstack.txt

Wenn Sie also jstack ohne Variable ausführen, wird Folgendes ausgegeben:

Terminate batch file Y/N? 

Ihr zweiter Fehler besteht darin, dass Sie die Eingabetaste gedrückt haben, anstatt einen Wert anzugeben, als Sie vom Programm gefragt wurden: Enter ID:. Wenn Sie zu diesem Zeitpunkt eine ID eingegeben hätten, z. B. 1234, würde die Variable %id% in unserem Fall 1234 zu diesem Wert. Sie haben jedoch KEINEN Wert angegeben und stattdessen die Eingabetaste gedrückt. Wenn Sie der Variablen keinen Wert geben und diese Variable zuvor noch nicht auf einen anderen Wert gesetzt wurde, wird die Variable %id% auf die Eingabeaufforderung des Befehls set gesetzt !! Nun ist %id% auf Enter ID: eingestellt, was auf Ihrem Bildschirm wie in der Batch-Datei angefordert wiedergegeben wurde, BEVOR Sie den JSTACK aufgerufen haben.

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

Jstack selbst hat die Eingabe wiederholt, ist auf einen Fehler gestoßen und aufgefordert, den Vorgang abzubrechen.
Und das alles wurde in die Datei jstack.txt geschrieben.

4
pashute

Dollarzeichen um die Variable funktionieren auf meinem Vista-Computer nicht, Prozentzeichen jedoch. Beachten Sie auch, dass ein Leerzeichen in der Zeile "set" zwischen der Eingabeaufforderung und der Benutzereingabe angezeigt wird.

3
SRE

Fügte gerade das hinzu

set /p NetworkLocation= Enter name for network?

echo %NetworkLocation% >> netlist.txt

sequenz zu meinem Netsh Batch Job. Es zeigt mir jetzt den Ort, an dem ich antworte, als Punkt für dieses Beispiel. Ich >> ändere ständig die Ausgabedatei, damit ich jetzt weiß, "Zuhause", "Arbeit", "Starbucks" usw. Auf der Suche nach klarer Luft kann ich die Kanäle mit der geringsten Nutzung ausfindig machen und feststellen, ob es 5 oder nur alle 2,4-MHz-WLANs in der Nähe gibt.

2
John

Nur um einen Standardwert der Variablen beizubehalten. Drücken Sie die Eingabetaste, um die Standardeinstellung aus der letzten Ausführung Ihrer .bat-Datei zu verwenden:

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

rem YourApp %Var1%

Ignorieren Sie bei der ersten Ausführung einfach die Meldung über das Fehlen einer Datei mit dem Anfangswert der Variablen (oder erstellen Sie die Datei Var1.txt manuell).

2
Antoni