Skocz do zawartości
serwkomp

Menu w bat ?

Rekomendowane odpowiedzi

Witam.

Panowie czy może tak byc ?

@echo off
:poczatek
cls
echo ----------------
echo Wybierz z listy
echo ----------------
echo.
echo 1)
echo 2)
echo 3)
echo 4) KONIEC
echo.
set /p opcja=wybierz:
if %opcja%==1 goto opcja1
if %opcja%==2 goto opcja2
if %opcja%==3 goto opcja3
if %opcja%==4 exit
goto zly_wybor
:opcja1
cls
echo
pause
goto poczatek
:opcja2
cls
echo
pause
goto poczatek
:opcja3
cls
echo
pause
goto poczatek
:zly_wybor
echo OPCJA NIE ZNANA..
pause
goto poczatek

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W jaki sposób mamy to ocenić?
Co w zasadzie mamy ocenić?

Jeżeli działa tak jak chcesz, to chyba jest ok :>
Ja dla takiego szablonu testowego dodałbym jednak wypisy  w poszczególnych opcjach, żeby mieć pewność wykonania tego co chciałem. Obecnie wszystkie wyglądają identycznie.

Kod dobrze wkleić w blok kodu, < > w menu posta. Do takich skryptów nie ma podświetlania składni ale przynajmniej można zachować wcięcia.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

Korzystanie z goto to jedna z najgorszych praktyk programowania (z wyjątkiem ASM).

Edytowane przez Karister

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W jaki sposób chcesz w  skrypcie to zrobić inaczej?
Pisać skomplikowane ify?

Jak chcesz zrobić pętlę niekończoną?

Jeżeli coś krytykujesz, to podpowiedz lepsze rozwiązanie.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

To nie jest krytyka, tylko przytoczenie ogólnie przyjętego faktu w kwestii praktyk programistycznych. Nie, nie chcę pisać skomplikowanych ifów. Chcę pisać czytelne i proste ify, pętle oraz funkcje. Czyli chcę korzystać ze standardowych rozwiązań dla języków wysokopoziomowych. Pętla nieskończona nie jest tutaj potrzebna, ale akurat w tej kwestii windowsowy batch jest upośledzony (brak pętli while?) i to akurat ta labelka dla pętli ma jakiś tam sens. Forem byłoby to strasznie koślawe. Mi chodziło o labelki dla opcji 1, 2, ... . O ile mi wiadomo, batch ma funkcje/procedury, czy jak to się tam zwie.

Btw. w nowszym PowerShellu nie da się tego zrobić normalnie?

Edytowane przez Karister

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ja bym proponował prześledzić twórczość kolegi i następnym razem zastanowić się nad odpowiadaniem :) 

  • Upvote 1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
W dniu 11.01.2024 o 09:57, Karister napisał:

windowsowy batch jest upośledzony (brak pętli while?)

I między innymi z tego powodu bym się tak nie czepiał. Prosty język, proste skrypty, grunt żeby działało, szkoda czasu na finezję.

Bat-y, bash-e itp. są proste i siermiężne. Ich podstawową zaletą jest działanie praktycznie na gołym systemie, w zasadzie zawsze są dostępne i można coś zautomatyzować.
Dla mnie to po prostu narzędzia do szybkiego użycia, nie muszą być ładne, byle działały tak jak mają.

W dniu 11.01.2024 o 09:57, Karister napisał:

Mi chodziło o labelki dla opcji 1, 2, ... . O ile mi wiadomo, batch ma funkcje/procedury, czy jak to się tam zwie.

No można, będzie to bardziej eleganckie.
Główną teoretycznie też można i rekurencyjnie zapętlić się.

W dniu 11.01.2024 o 09:57, Karister napisał:

Btw. w nowszym PowerShellu nie da się tego zrobić normalnie?

Pewnie się da (prawie nie znam języka, tyle co czasem potrzebuję coś na szybko skrobnąć przy pomocy googla), kwestia czy można.
To wygląda na jakieś typowe zadanie szkolne, a nie program dla siebie.

  • Upvote 1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@serwkomp do takich skrypcików poczatuj sobie z jakimś GPT i szybko dojdziesz do tego co chcesz osiągnąć.

@PCLabGPT :

W dniu 8.01.2024 o 18:26, serwkomp napisał:

Panowie czy może tak byc ?

@echo off
:poczatek
cls
echo ----------------
echo Wybierz z listy
echo ----------------
echo.
echo 1)
echo 2)
echo 3)
echo 4) KONIEC
echo.
set /p opcja=wybierz:
if %opcja%==1 goto opcja1
if %opcja%==2 goto opcja2
if %opcja%==3 goto opcja3
if %opcja%==4 exit
goto zly_wybor
:opcja1
cls
echo
pause
goto poczatek
:opcja2
cls
echo
pause
goto poczatek
:opcja3
cls
echo
pause
goto poczatek
:zly_wybor
echo OPCJA NIE ZNANA..
pause
goto poczatek

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
@Wu70 Tak, skrypt w pliku bat, który został zaprezentowany wygląda na funkcjonalny. Jest to proste menu z wyborem opcji, które można rozszerzyć o dodatkowe działania pod każdym wybranym punktem. Obecnie każdego wyboru (oprócz opcji numer 4, która kończy działanie skryptu) odpowiada pusty szablon, który czyści ekran, wyświetla nową, pustą linię, czeka na wciśnięcie klawisza przez użytkownika (komenda `pause`), a następnie powraca do początku menu (`goto poczatek`).

Możliwe, że chciałbyś, aby po wybraniu odpowiednich opcji (1, 2, 3) działy się konkretne rzeczy. Jeśli tak, powinieneś zastąpić `echo` oraz `pause` pod tymi etykietami (`:opcja1`, `:opcja2`, `:opcja3`) odpowiednimi komendami, które mają zostać wykonane. Jeśli potrzebujesz pomocy w uzupełnieniu tych sekcji o specyficzne polecenia, jestem tutaj, aby pomóc.

Drobną kwestią jest również obsługa nieprawidłowych wyborów - w sekcji `:zly_wybor` dobrze jest dodać `cls` przed wyświetleniem komunikatu "OPCJA NIE ZNANA..", aby przed wyświetleniem błędu wyczyścić ekran:

```bat
:zly_wybor
cls
echo OPCJA NIE ZNANA..
pause
goto poczatek
```

Jeśli masz jakieś dalsze pytania lub potrzebujesz konkretnego przykładu, jak coś można zrobić w skrypcie batchowym, daj znać!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...