Re: Bat - dziwne zachowanie

Autor: Grzegorz Niemirowski <gnthexfiles_at_poczta.onet.pl>
Data: Fri, 5 Apr 2013 17:37:32 +0200
Message-ID: <kjmr3q$ig4$1@news.icpnet.pl>
Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=original

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 second 
Received 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