Wie lese ich Eingaben von der Konsole in einer Batch-Datei?

82

Wie lese ich Eingaben von der Konsole in einer Batchdatei? Was ich erreichen möchte, ist die Funktionalität von scanf in C. Wie kann ich dasselbe in einer Batchdatei tun?

Nohsib
quelle
Mögliches Duplikat des Problems mit Benutzereingaben in meiner Batch-Datei
Raymond Chen
@ Raymond: Nein, die Frage ist, mehrere Zeichen als Zeichenfolge von der Tastatur in eine Variable zu lesen.
Nohsib
Der Befehl set /pliest, was auch immer der Benutzer eingibt, sei es ein Buchstabe oder mehrere.
Raymond Chen
@ Raymond: können Sie freundlicherweise ein Code-Snippet dazu teilen ..
Nohsib

Antworten:

140

Das Code-Snippet im verknüpften vorgeschlagenen Duplikat liest Benutzereingaben.

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

Der Benutzer kann so viele Buchstaben eingeben, wie er möchte, und es wird in die Variable delBuild eingefügt.

Raymond Chen
quelle
35
Hinweis: Sie können die Benutzereingabe mit%delBuild%
Jacob
1
Habe zu bemerken , dass echo !delBuild!Ihnen einen zuverlässigen Ausgang Ausführung geben , wenn setlocal EnableDelayedExpansionaktiviert
xacinay
29

Wenn Sie nur schnell versuchen, eine cmd-Instanz offen zu halten, anstatt sie sofort zu beenden, reicht es aus, einfach Folgendes zu tun

set /p asd="Hit enter to continue"

am Ende Ihres Skripts und es wird das Fenster offen halten.

Beachten Sie, dass dies asdals Umgebungsvariable festgelegt wird und durch alles andere ersetzt werden kann.

TankorSmash
quelle
15
Zu diesem Zweck hat jemand den pauseBefehl erfunden . Auch ist es set /pnicht set \p.
Stephan
6
"Wie jeder sagt" impliziert, dass die Antwort bereits gegeben ist, so dass eine andere ohne weitere Informationen unnötig ist
jeb
1
@Jeb du hast recht. Mein Problem war, dass sie Variablen und Echo enthielten, während ich nichts davon brauchte. Ich habe ein oder zwei Minuten gebraucht, um ihre Antworten zu analysieren, da ich keine Batch-Erfahrung habe. Ich glaube, meine Antwort entspricht der für meine Bedürfnisse geeigneten Mindestantwort.
TankorSmash
@Stephan danke Kumpel, in beiden Punkten. Ich suchte nach einer Möglichkeit, die cmd-Instanz nach Abschluss eines Skripts zum Beenden beizubehalten. Es reichte nicht aus, nur eine X-Zeit anzuhalten.
TankorSmash
@ArslanAhmad Ich habe gerade getestet, es funktioniert immer noch von cmd, aber nicht Powershell. Stellen Sie sicher, dass Sie das Richtige verwenden.
TankorSmash
18

Zusätzlich zur vorhandenen Antwort kann eine Standardoption wie folgt festgelegt werden:

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

Auf diese Weise können Benutzer einfach die Eingabetaste drücken, wenn sie die Standardeinstellung eingeben möchten.

Richard Williams
quelle