Jak odczytać dane wejściowe z konsoli w pliku wsadowym?

82

Jak odczytać dane wejściowe z konsoli w pliku wsadowym? To, co próbuję osiągnąć, to funkcjonalność scanf w C. Jak mogę zrobić to samo w pliku wsadowym?

Nohsib
źródło
@ Raymond: Nie, pytanie brzmi: czytać wiele znaków jako ciąg z klawiatury do zmiennej.
Nohsib
Polecenie set /pczyta wszystko, co użytkownik wpisze, czy to jedna litera, czy wiele.
Raymond Chen
@ Raymond: uprzejmie możesz udostępnić fragment kodu na ten temat ...
Nohsib,

Odpowiedzi:

141

Fragment kodu w połączonym proponowanym duplikacie odczytuje dane wejściowe użytkownika.

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

Użytkownik może wpisać tyle liter, ile chce, i trafi to do zmiennej delBuild.

Raymond Chen
źródło
36
Uwaga: możesz użyć danych wejściowych użytkownika za pomocą%delBuild%
Jacob
1
Muszę zauważyć, że echo !delBuild!da ci to bardziej niezawodny wynik po setlocal EnableDelayedExpansionuruchomieniu, gdy jest włączony
xacinay
29

Jeśli chcesz po prostu szybko otworzyć instancję cmd, zamiast natychmiast ją wychodzić, wystarczy wykonać następujące czynności

set /p asd="Hit enter to continue"

na końcu skryptu i pozostawi okno otwarte.

Zauważ, że zostanie to ustawione asdjako zmienna środowiskowa i można ją zastąpić czymkolwiek innym.

TankorSmash
źródło
15
w tym celu ktoś wymyślił pausepolecenie. Także to set /pnie set \p.
Stephan
6
„Jak wszyscy mówią” oznacza, że ​​odpowiedź jest już udzielona, ​​więc kolejna bez dodatkowych informacji jest zbędna
jeb
1
@jeb masz rację. moim problemem było to, że zawierały zmienne i echo, podczas gdy nie potrzebowałem tego. Przetwarzanie odpowiedzi zajęło mi minutę lub dwie, ponieważ nie mam doświadczenia w zakresie partii. Uważam, że moja odpowiedź spełnia absolutne minimum odpowiedzi odpowiadającej moim potrzebom.
TankorSmash
@Stephan dziękuje stary, z obu powodów. Szukałem sposobu, aby zachować instancję cmd do zamykania po zakończeniu skryptu, po prostu wstrzymanie na czas X nie wystarczyło.
TankorSmash
@ArslanAhmad Właśnie przetestowałem, nadal działa z cmd, ale nie Powershell. Upewnij się, że używasz właściwej rzeczy.
TankorSmash
18

Oprócz istniejącej odpowiedzi można ustawić opcję domyślną w następujący sposób:

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

Dzięki temu użytkownicy mogą po prostu nacisnąć „Enter”, jeśli chcą wprowadzić wartość domyślną.

Richarda Williamsa
źródło