logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Plik wsadowy "bat" - pętla spowalniająca wykonanie

watanga 23 Mar 2020 23:43 2154 6
REKLAMA
  • #1 18555329
    watanga
    Poziom 6  
    Posty: 13
    Napisałem prosty plik bat zamykający w Menadżerze zadań proces pewnego starszego programu, który niby się wyłącza, ale jego proces w menadżerze zostaje.
    Celowo nie "wygasiłem" okienka dosowego, żeby zobaczyć czy proces został zamknięty. Ale okienko zbyt szybko się zamyka, więc chciałbym nieco spowolnić jego zamykanie.
    Czy w pliku bat można napisać jakąś prostą pętlę warunkową, która by spowalniała zamykanie okna?
  • REKLAMA
  • #2 18555373
    koma2k
    Poziom 13  
    Posty: 39
    Pomógł: 8
    Ocena: 5
    Można najzwyczajniej na świecie dać na końcu "pause" żeby okno dosowe zostało otwarte, aż nie klikniesz w nim dowolnego klawisza
  • REKLAMA
  • #3 18555389
    watanga
    Poziom 6  
    Posty: 13
    koma2k napisał:
    Można najzwyczajniej na świecie dać na końcu "pause" żeby okno dosowe zostało otwarte, aż nie klikniesz w nim dowolnego klawisza


    Póki nie znajdę odpowiedzi na moje pytanie tak własnie zrobiłem, ale to nie jest rozwiązanie mojego problemu. Chcę tylko tylko chwilowo przedłużyć wyświetlanie okienka, aby zdążyć przeczytać: czy SUCCESS, czy ERROR.
  • REKLAMA
  • #4 18555409
    koma2k
    Poziom 13  
    Posty: 39
    Pomógł: 8
    Ocena: 5
    watanga napisał:
    Czy w pliku bat można napisać jakąś prostą pętlę warunkową, która by spowalniała zamykanie okna?

    Oczywiście, funkcja IF się przydaje, możesz skleić funkcję IF sprawdzającą czy dany proces działa i zależnie od wyniku kierującą do np: ponownej próby zamknięcia a w razie sukcesu (proces nie działa) zakończenia programu(bat'a) / zamknięcia okna.
    Polecam te dwie stronki, niezwykle pomocne przy konstruowaniu podstawowych BAT'ów.

    https://www.tutorialspoint.com/batch_script/index.htm

    http://www.trytoprogram.com/batch-file/

    Dodano po 16 [minuty]:

    watanga napisał:
    Chcę tylko tylko chwilowo przedłużyć wyświetlanie okienka, aby zdążyć przeczytać: czy SUCCESS, czy ERROR.

    A, to nawygodniej użyć chyba SLEEP lub TIMEOUT po którym podajesz numerycznie ilość sekund ile ma czekać
    przy czym sleep jest "sztywny" - nie pozwala przeskoczyć licznika, a timeout można pominąć po odczytaniu kliknięciem klawisza.
    jeśli nie chcesz widzieć komunikatu "Waiting for 0 seconds, press a key to continue ..." dla timeout dodaj po ilości sekund modyfikator "> NUL"
  • REKLAMA
  • #5 18555455
    watanga
    Poziom 6  
    Posty: 13
    koma2k napisał:
    funkcja IF się przydaje, możesz skleić funkcję


    Nie, to również nie jest rozwiązanie problemu, bo w przypadku "true" szybkość zamykania okienka nie wzrosłaby znacząco, natomiast w przypadku "false" - działałaby jak komenda stop. Chyba w QuickBasicu była taka komenda "pause 4000" (pauzuj przez 4000 milisekund). Ale to w bat nie działa.
    Jakby tego było mało, do szkoły chodziłem w czasach, gdy podstawowym językiem obcym, był język rosyjski. Może jakieś adresy do stron po polsku?

    Dodano po 3 [minuty]:

    koma2k napisał:
    nawygodniej użyć chyba SLEEP lub TIMEOUT


    Tak! To jest to - sprawdziłem - działa. Serdeczne dzięki!!!
  • #6 18555477
    koma2k
    Poziom 13  
    Posty: 39
    Pomógł: 8
    Ocena: 5
    watanga napisał:
    Nie, to również nie jest rozwiązanie problemu, bo w przypadku "true" szybkość zamykania okienka nie wzrosłaby znacząco, natomiast w przypadku "false" - działałaby jak komenda stop.

    Bo to w sumie raczej już na kolejny poziom tego bata, nie jako "opóźniacz", a jako zastępstwo, żebyś nie musiał sam sprawdzać wyniku działania (i podejmować ewentualnych kolejnych działań, tylko ażeby program to weryfikował i podejmował kolejne zależnie od wyniku sprawdzenia.
    [zamknij proces]
    JEŚLI (IF) [zamknij proces] udany -> wyświetl okejke przez parę sekund i zamknij, jeśli nie udany (else) -> spróbuj [zamknij proces innym sposobem]
    i tak można zbudować sobie program próbujący wykonać zadanie na kilka sposobów zależnie od wyniku poprzedniej próby, ewentualnie można zastosować jako formę wyraportowania wyniku.

    watanga napisał:
    Jakby tego było mało, do szkoły chodziłem w czasach, gdy podstawowym językiem obcym, był język rosyjski. Może jakieś adresy do stron po polsku?

    Z racji jasnego, technicznego angielskiego we wcześniej podanych linkach tłumacz wujka Gugla powinien sobie z nimi dobrze dać radę.
    Ale, że ciężko o łatwo wyszukiwalne, dobre źródła w języku polskim, spróbuję coś wykopać. i wrzucić

    podstawowe: https://www.ee.pw.edu.pl/~tomzdun/zajecia/soisk_l/2.%20DOS%20-%20Programowanie%20wsadowe.pdf
    więcej, ale wciąż podst. http://www.ee.pw.edu.pl/~graniszw/students/SOiSK/DOS_UNIX/doswinwsad.pdf
    i w sumie ciekawie zrealizowane przez młodego kodera wideoporadniki
    https://www.youtube.com/watch?v=QTcnuOsI2h4&list=PLTOVxp90At7cnJpkyXvDk51CKAKb-jrBz

    http://edukacja.3bird.pl/download/informatyka/etap4/programowanie/informatyka-etap4-batch.pdf
    https://www.thomas-krenn.com/pl/wiki/Komendy_wiersza_polece%C5%84_systemu_Windows
    https://winiso.pl/poradniki/polecenia-cmd/lista-komend-wiersz-polecen
  • #7 18555483
    watanga
    Poziom 6  
    Posty: 13
    Ostatecznie plik przedstawia się następująco:

    @Echo. off
    C:\WINDOWS\system32\taskkill.exe /F /IM Program.exe
    timeout 2
    exit

    Dwie sekundy wystarczają żeby odczytać komunikat. Jeszcze raz dziękuję.

Podsumowanie tematu

✨ Użytkownik stworzył plik wsadowy (.bat) do zamykania procesu programu, który nie kończył się poprawnie w Menedżerze zadań. Aby spowolnić zamykanie okna konsoli i umożliwić odczytanie komunikatu o statusie (SUCCESS lub ERROR), zaproponowano kilka rozwiązań. Najpierw zasugerowano użycie komendy "pause", jednak użytkownik poszukiwał bardziej elastycznego rozwiązania. Ostatecznie, zastosowano komendę "timeout", która pozwala na określenie czasu oczekiwania przed zamknięciem okna, co okazało się skuteczne. Użytkownik podzielił się finalną wersją skryptu, który zawierał komendę "taskkill" do zamykania procesu oraz "timeout" na 2 sekundy.
Wygenerowane przez model językowy.
REKLAMA