Budzik <budzik61_at_poczta.o.n.e.t.pl.nie.spam.oj> napisał(a):
> Mam mały problem z batem.
> Mianowicie mam kilka ciągle włączonych batów, które robią coś w pętli.
> Czasami jednak chciałbym wstrzymać ich działanie.
> Dotychczas robiłem to poprzez kliknięcie w okno cmd ale przy większej
> ilości okien jest to kłopotliwe.
> Wymyśliłem wiec, ze wstawie w program dodatkowe sprawdzenie czy na
> pulpicie jest jakis plik a jak bede chciał zatrzymać, to po prosut
> wstawie taki plik na pulpit.
> Wpisałem wiec do bata linijki:
> :blad
> if exist "new text document.txt" goto blad
> I działa.
> Ale:
> Wszystko dzieje się w pętli:
> for /L %%i in (1,1,100) do (
> :blad
> if exist "new text document.txt" goto blad
> włączenie_programu_z _uzyciem_parametru_%%i
> )
> I niestety po usunięciu pliku czyli ponownym włączeniu działania bata ten
> nie pamięta już parametru %%i i kończy działanie pętli.
> Dlaczego tak się dzieje i jak temu zapobiec?
Dlaczego tak się dzieje? Bo tak. Ktoś widocznie uznał, że to ma być skok
poza strukturą/kontekstem i kończyć działanie pętli. Zamiast GOTO możesz
spróbować użyć CALL. Jako skok do podprocedury, a więc instrukcja
strukturalna, powoduje zachowanie kontekstu pętli. Z tym, że podprocedura,
to nie jest do końca to, czego potrzebujesz. Możesz spróbować użyć kolejnego
fora, np. in (1,1,1) i w nim dopiero umieścić if i goto, może wtedy wyjdzie
tylko z tej wewnętrznej pętli.
Albo przepisz te swoje skrypty na PowerShell i nie będziesz musiał się
męczyć z takimi kruczkami cmd.exe.
-- Grzegorz Niemirowski http://www.grzegorz.net/ OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/ Uptime: 2 days, 0 hours, 19 minutes and 1 secondReceived on Fri 05 Apr 2013 - 17:40:05 MET DST
To archiwum zostało wygenerowane przez hypermail 2.2.0 : Fri 05 Apr 2013 - 17:42:01 MET DST