Mam plik wsadowy, który automatyzuje kopiowanie wielu plików z jednego miejsca do drugiego iz powrotem dla mnie. Jedyną rzeczą jest to, że pomaga mi przypadkowo wybierając to polecenie z mojego bufora poleceń i masowo nadpisując niezatwierdzone zmiany.
Jakiego kodu będę potrzebować dla mojego pliku .bat, aby napisać „czy na pewno” i zmusić mnie do wpisania „y”, zanim uruchomi resztę pliku? Jeśli zostanie wpisane cokolwiek innego niż "y", powinno zakończyć wykonywanie w tej linii.
Edytuj 27 listopada Ok, ponownie oznaczyłem to jako bez odpowiedzi, ponieważ nadal nie mogę tego rozgryźć. Kiedy wołam „Wyjdź”; zamyka cmd.exe, którego nie chcę. Wszystko to dlatego, że Windows zaimplementował niewłaściwy bufor poleceń [inaczej niż to, do czego jestem przyzwyczajony]
źródło
SET AREYOUSURE=N
przed monitem, aby wyczyścić wybór, jeśli wcześniej uruchomiłeś skrypt w tym oknie poleceń. Bez tego domyślna pozostanie poprzednio wybrana opcja.setlocal
iendlocal
powinni się tym zająć.%AREYOUSURE%
nie będzie już istnieć poendlocal
.wypróbuj polecenie WYBIERZ , np
źródło
choice
Komenda nie jest dostępna wszędzie. W nowszych wersjach systemu Windowsset
polecenie ma/p
opcję uzyskania danych wejściowych użytkownikazobacz,
set /?
aby uzyskać więcej informacjiźródło
Istnieją dwa polecenia dla monitów użytkownika w wierszu poleceń systemu Windows:
/P
dostępną we wszystkich wersjach systemu Windows NT z włączonymi rozszerzeniami poleceń iset to wewnętrzne polecenie procesora poleceń systemu Windows
cmd.exe
. Opcja/P
monitowania użytkownika o ciąg jest dostępna tylko przy włączonych rozszerzeniach poleceń, które są domyślnie włączone, ponieważ w przeciwnym razie prawie żaden plik wsadowy nie działałby już w dzisiejszych czasach.choice.exe to osobna aplikacja konsolowa (polecenie zewnętrzne) znajdująca się w
%SystemRoot%\System32
.choice.exe
systemu Windows Server 2003 można skopiować do katalogu%SystemRoot%\System32
na komputerze z systemem Windows XP w celu użycia w systemie Windows XP, podobnie jak wiele innych poleceń, które nie są domyślnie dostępne w systemie Windows XP, ale są domyślnie dostępne w systemie Windows Server 2003.Jest najlepszą praktyką do używania rzecz WYBORU nad wykorzystaniem SET / P z powodu następujących powodów:
/C
(iCtrl+C ) i generuje dźwięk błędu, jeśli użytkownik naciśnie niewłaściwy klawisz.echo Y | call PromptExample.bat
do użycia WYBORU .cmd
powodu błędu składniowego lub w przypadku wykonywania poleceń niezawartych w pliku wsadowym przy nie dobrze zakodowany plik wsadowy. Wymaga pewnych wysiłków, aby zabezpieczyć SET / P przed pomyłką lub celowym błędem wprowadzonym przez użytkownika.Oto prosty przykład użycia preferowanego WYBORU i alternatywnie SET / P na
choice.exe
niedostępnym na używanym komputerze z systemem Windows.Uwaga: Ten plik wsadowy używa rozszerzeń poleceń, które nie są dostępne w systemie Windows 95/98 / ME, używając
command.com
zamiastcmd.exe
interpretatora poleceń.set "UserChoice=!UserChoice: =!"
Dodano wiersz poleceń, aby umożliwić wywołanie tego pliku wsadowegoecho Y | call PromptExample.bat
w systemie Windows NT4 / 2000 / XP i nie wymaga użyciaecho Y| call PromptExample.bat
. Usuwa wszystkie spacje z ciągu odczytywanego ze STDIN przed uruchomieniem dwóch porównań ciągów.echo Y | call PromptExample.bat
powoduje przypisanie YSPACE do zmiennej środowiskowejUserChoice
. Spowodowałoby to dwukrotne przetworzenie zachęty, ponieważ"Y "
nie uwzględnia wielkości liter równych"N"
ani"Y"
bez usuwania najpierw wszystkich spacji. WięcUserChoice
z YSPACE jako wartość spowoduje uruchomienie szybkiego drugi raz z opcjąN
zdefiniowany jako domyślny w pliku wsadowym na drugiej szybkiej realizacji których Kolejne wyniki w niespodziewanym wyjeździe z przetwarzaniem pliku wsadowego. Tak, bezpieczne korzystanie z SET / P jest naprawdę trudne, prawda?Aby uzyskać jeszcze więcej informacji na temat używania SET / P i CHOICE do monitowania użytkownika o wybór z listy opcji, zobacz odpowiedź na temat Jak zatrzymać interpreter poleceń systemu Windows przed zakończeniem wykonywania pliku wsadowego przy nieprawidłowym wprowadzeniu użytkownika?
Kilka dodatkowych wskazówek:
UserChoice
zN
iY
, ale wartościąUserChoice
otoczoną przez"
z"N"
i"Y"
.EQU
iNEQ
przeznaczone są podstawowym do porównywania dwóch liczb całkowitych w zakresie -2147483648 do 2147483647, a nie do porównywania dwóch ciągów.EQU
iNEQ
działa również dla porównań ciągów, ale skutkuje porównywaniem ciągów w podwójnych cudzysłowach przy bezużytecznej próbie konwersji lewego ciągu na liczbę całkowitą.EQU
iNEQ
może być używany tylko z włączonymi rozszerzeniami poleceń. Operatory porównania dla porównań ciągów są==
inot ... ==
działają nawet z wyłączonymi rozszerzeniami poleceń, ponieważ nawetcommand.com
MS-DOS i Windows 95/98 / ME już je obsługiwały. Aby uzyskać więcej informacji na temat operatorów porównania JEŻELI , zobacz Symbol równoważny NEQ, LSS, GTR itp. W plikach wsadowych systemu Windows .goto :EOF
wymaga włączonych rozszerzeń poleceń, aby naprawdę zakończyć przetwarzanie plików wsadowych. Aby uzyskać więcej informacji, zobacz Gdzie powraca GOTO: EOF?Aby zrozumieć używane polecenia i sposób ich działania, otwórz okno wiersza polecenia, wykonaj w nim następujące polecenia i przeczytaj dokładnie wszystkie strony pomocy wyświetlane dla każdego polecenia.
choice /?
echo /?
endlocal /?
goto /?
if /?
set /?
setlocal /?
Zobacz też:
Wyjaśnia powód użycia składni
set "variable=value"
przy przypisywaniu ciągu do zmiennej środowiskowej.if errorlevel X
zachowaniu i operatorze&
.|
i obsługę STDIN .SystemRoot
.źródło
CHOICE.COM
była domyślnie dostępna w systemach MS-DOS 6.0, MS-DOS 7.0, Windows 95 i Windows 98. Alechoice.exe
domyślnie nie była instalowana w systemach Windows NT4, Windows 2000 i Windows XP.CHOICE.COM
może być używany również na NT4, Windows 2000 i Windows XP, ale lepiej byłoby użyć wersji 32-bitowejchoice.exe
z odpowiedniego zestawu zasobów. Zobacz stronę Roba van der Woude o WYBORZE . Opcje są częściowo różne międzyCHOICE.COM
ichoice.exe
. Jednak pytanie nie dotyczy DOS.Tutaj trochę łatwiej:
lub
źródło
%errorlevel%
jest zawsze wartością całkowitą. Zobacz tutaj dokumentację zawierającą przykład.Oto moja metoda odpowiedzi na tak / nie .
Nie ma też rozróżniania wielkości liter.
To po prostu sprawdza błędy podane przez dane wejściowe i ustawia
choice
zmienną na wszystko, czego potrzebujesz, aby można ją było użyć poniżej w kodzie.źródło
Jeśli chcesz, aby program wsadowy wyszedł z powrotem do znaku zachęty i nie zamykał znaku zachęty (AKA cmd.exe), możesz użyć "exit / b".
To może pomóc.
Lub jeśli nie chcesz używać tylu wierszy ...
Mam nadzieję że to pomoże...
źródło
Oto prosty przykład, którego używam w skrypcie kopii zapasowej (.bat / batch) w systemie Windows 10, co pozwala mi mieć różne opcje podczas tworzenia kopii zapasowych.
Możesz mieć tyle bloków, ile potrzebujesz.
źródło
Najpierw otwórz terminal.
Następnie wpisz
Następnie otwórz. Pewnie i wklej to do środka.
Następnie zamknij plik.
Spowoduje to wyświetlenie pytania, czy na pewno przed kontynuowaniem polecenia.
źródło
Otwórz terminal. Wpisz co następuje
Wklej to wewnątrz sure.sh
Zamknij sure.sh i wpisz to w terminalu.
Teraz, jeśli wpiszesz sure przed wpisaniem polecenia, przed kontynuowaniem polecenia wyświetli się pytanie, czy jesteś pewien.
Mam nadzieję, że to jest pomocne!
źródło