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?



@ 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.


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.


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ą.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.