Batch - wykonywanie poleceń po IF


(macios4) #1

Mam mniej więcej taki skrypt:
@echo off

echo Start skryptu.
goto :top

:top
echo Zestaw poleceń.
pause
set /P c=Czy wykonać zestaw poleceń? [T/N]
if /I “%c%” EQU “T”
echo wykonaj polecenie 1
echo wykonaj kolejne polecenie
echo wykonaj następnie jeszcze inne polecenie
goto :dalej
if /I “%c%” EQU “N” goto :dalej

:dalej
echo Drugi zestaw poleceń
pause
set /P c=Czy wykonać drugi zestaw poleceń? [T/N]
if /I “%c%” EQU “T”
echo wykonaj polecenie 2
echo wykonaj jakieś inne polecenie
echo wykonaj ostatnie polecenie
if /I “%c%” EQU “N” goto :exit
echo

:exit
echo Gotowe. Koniec skryptu.
echo.
pause

Jest to skrypt roboczy jak widać. Chodzi o to, że warunek IF pyta się czy wykonać jakieś polecenia (uruchomić programy), jeśli tak, to niech je poprostu wykona, a jeśli nie, to niech idzie dalej do kolejnego zestawu poleceń. Nie działa mi to jednak prawidłowo. Czy ktoś pomoże?


(bachus) #2

W większości języków programowania IF ma to do siebie, że lubi się z ELSE;

Po Twoim ‘TRUE’ i tak wykona nie ważne, jaką dasz odpowiedź.


(Fizyda) #3

Nie mam pojęcia czy o to Ci chodzi bo tak wytłumaczyłeś, że tylko dzwonić do wróżbity Macieja albo zgadywać. Ja nie mam kasy na wróżbitę Macieja, moja szklana kula się rozładowała więc zgaduję.

Instrukcje które mają zostać wykonane w ramach bloku instrukcji wyrażenia if musisz objąć w blok instrukcji czyli ( ) w przeciwnym razie jeśli warunek zostanie spełniony to wykonana zostanie tylko jedna operacja która po nim wystąpi (albo i nie bo nie wiem jak to jest dokładnie w batchu, piszę jak jest w 99% językach). Więc jak chcesz aby po spełnieniu warunku wykonała się operacja1 operacja2 i operacj3 to musisz to zapisać mniej więcej tak:

if /I “%c%” EQU “T” (
	operacja1
	operacja2
	operacja3
)

Jeśli dopuszczasz, że w ramach jednego uruchomienia możesz wykonać więcej niż jeden warunek to nie ma potrzeby używania else jak proponuje @bachus. Nie ma też potrzeby bawić się w goto.


(macios4) #4

@Fizyda
Chodziło mi o to, że skrypt pyta się czy wykonać określone operacje w bloku “top”. Jeśli potwierdzić to klawiszem T to niech je wykonuje po kolei a następnie przechodzi do bloku “dalej” i ta sama procedura. Sory jeśli źle to opisałem, ale wielkie dzięki bo dokładnie o to mi chodziło :grinning: Jak widać diabeł tkwi w szczegółach, zabrakło nawiasów.