MrKris7100 - 24-11-2012 23:26:33

[ MegaTuT ] Programowanie w batch



-Co nam potrzebne do programowania w batch?
-Zwykły notanik ( Polecam Notepad++ )

Batch nie osbsługuje polskich znaków chyba że użyjemy odpowiedniego kodowania znaków (o tym kiedy indziej)

OK, Zaczynajmy.

Pierwszy Program


Tak więc otwórz notatnik i wpisz w nim kod:

Kod:

@echo off
echo Siema!
pause

Teraz małe wyjaśnienie komend:
@echo off - ukrywa nam wyświetlanie komend (najlepiej wpisać w każdym programie)
echo Siema! - Wyświetli nam tekst "Siema!"
pause - Zatrzymuje program i wyświetla tekst "Aby kontynułować naciśnij dowolny klawisz..."

Zapisz plik z tym kodem jako siema.bat (WAŻNE: do każdej nazwy pliku musisz dodać ".bat")

Cls, > nul, echo.



Komenda cls służy do wyczyszczenia wszystkiego co znajduję się obecnie w oknie
Komendę " > nul" dodaję się na końcu np. pause (pause > nul) służy ona do ukrycia tekstu, lub czegoś innego np. pause > nul sprawi że skrypt się zatrzyma ale nie wyświetli komunikatu "Aby kontynułować naciśnij dowolny klawisz..."
Komenda echo. służy do wyświetlenia pustej linii

Teraz czas na program z wykorzystaniem tych 3 komend
Wpisz kod do notatnika:

Kod:

@echo off
echo Czesc jestem Komputer.
echo.
echo Wcisnij dowolny klawisz.
pause > nul
cls
echo Wyczyszczono ekran!
echo.
echo Koniec
echo.
pause

Zapisz jako nazwa.bat

Jak widzimy skrypt wyświetla nam tekst "Czesc jestem Komputer.", pustą linię, oraz tekst "Wcisnij dowolny klawisz.". Gdy klikniemy dowolny klawisz ekran się wyczyści i wyświetli tekst "Wyczyszczono ekran!", pustą linię, tekst "KONIEC"

Menu, zmienne, etykiety



Zmienne to coś jak koszyk na grzyby i to my decydujemy co do nich wsadzamy.
Proste wykorzystanie zmiennych, użyjemy polecenia set :

Kod:

@echo off
set nazwa_zmiennej=Czesc jestem tekstem w zmiennej
echo %nazwa_zmiennej%
pause>nul

@echo off - wiadomo
set nazwa_zmiennej=Czesc (...) - "Wsadza grzyby do naszego koszyka który nazywa się nazwa_zmiennej"
Czyli wsadza tekst Czesc (...) do zmiennej nazwa_zmiennej
echo %nazwa_zmiennej% - Wyświetla nam wartość zmiennej. Każdą zmienną którą chcemy wyświetlić w  echo musimy zacząć i zakończyć znakiem "%"
pause>nul - wiadomo
zamiast nazwa_zmiennej możemy wpisać dowolną inną nazwe zmiennej

A co jeśli chcemy wpisać tekst na ekranie i miałby sie on przypisać do zmiennej?
Proste! Użyjmy kodu:

Kod:

@echo off
echo Wpisz jak masz na imie.
set/p "nazwa_zmiennej=>> "
cls
echo A wiec masz na imie %nazwa_zmiennej%.
pause>nul

set/p "nazwa_zmiennej=>> " - Pozwala nam na wpisanie tekstu w oknie, zapisze go do nazwa_zmiennej
po czym w dalszej części kodu wyświetli wartość.


Czas na 1 menu!
Użyjmy kodu:

Kod:

@echo off
:menu
cls
echo Menu:
echo 1) Menu1
echo 2) Menu2
(...)
set/p "menu=>> "
if %menu%==1 goto menu1
if %menu%==2 goto menu2
:menu1
cls
echo Menu1
echo Menu - dowolny klawisz
pause>nul
goto menu
:menu2
cls
echo Menu2
echo Menu - dowolny klawisz
pause>nul
goto menu

:menu - jest to etykieta coś jak zapis w grze przy wczytywaniu zapis mówi grze dokąd ma dojść nazwa etykiety może być dowolna, etykiety zaczynają się znakiem ":"
echo - wyświetla tekst
set/p "menu=>> " przypisze wpisany tekst do zmiennej menu
if %menu%==1 goto menu1 - komenda if sprawdza czy w zmiennej menu wpisaliśmy 1 jeżeli warunek jest prawdziwy wykonuje polecenie goto menu czyli z ang. goto "idź do" jak nazwa wskazuje program ma iść do etykiety menu1
goto menu - ma iść do etykiety menu

Uruchamianie innego programu, strony internetowej



Aby uruchomić program / stronę internetową wystarczy nam kod:

Kod:

@echo off
start http://www.google.pl

Lub

Kod:

 @echo off
start notepad.exe

Pierwszy przykład uruchomi nam stronę internetową www.google.pl
Drugi zaś uruchomi notatnik

Operacje na plikach, folderach



Tworzenie folderu
Kod:

Kod:

@echo off
md nazwa_folderu

Ten kod utworzy nam folder o nazwie nazwa_folderu

Kasowanie folderu
Kod:

Kod:

 @echo off
rd nazwa_folderu

Ten kod skasuje nam folder o nazwie nazwa_folderu

Kasowanie pliku
Kod:

Kod:

del plik.*

Gdzie plik to ścierzka do pliku/nazwa pliku.rozszerzenie np. .mp3

Więcej może niedługo :P

KONIEC!

3P!c - 25-11-2012 00:08:01

Ładnie napisany leci plus

NashiPL - 02-08-2013 14:58:03

Ładnie wszystko opisane... Mam tylko jedno pytanie, np. jest zmienna %imie%. Chcialbym przeniesc jej zawartosc do pliku tekstowego, powinno miec forme Imie: %nazwa_zmiennej% Robi sie to tak? %imie%>imie.txt

Poprawnie?

BienQsim - 02-10-2013 15:53:00

Hejka... Sorka, że odkopuje ale mam problem... Jak zrobić w menu aby zaraz po wpisaniu cyfry przełączało do np. :menu1

BienQsim - 02-10-2013 18:05:31

A jak się używa tego key.exe?

BienQsim - 02-10-2013 19:29:11

A mogę wiedzieć jakby to wyglądało tu:


@echo off
TITLE Excrate - Map 1.1
mode con:cols=150 lines=50
:A1
CLS
echo       A   B   C
echo 1  V
echo 2
echo 3
Type script\odd1.odd
echo.
echo D-B1; S-A2
set/p "menu=>> "
if %menu%==D goto B1
if %menu%==S goto A2
PAUSE >NUL
:A2
CLS
echo       A   B   C
echo 1 
echo 2  V
echo 3 
Type script\odd1.odd
echo.
echo W-A1; D-B2; S-A3
set/p "menu=>> "
if %menu%==D goto B2
if %menu%==W goto A1
if %menu%==S goto A3
PAUSE >NUL
:A3
CLS
echo       A   B   C
echo 1 
echo 2
echo 3  V
Type script\odd1.odd
echo.
echo W-A2; D-B3;
set/p "menu=>> "
if %menu%==D goto B3
if %menu%==W goto A2
PAUSE >NUL
:B1
CLS
echo       A   B   C
echo 1      V
echo 2
echo 3
Type script\odd1.odd
echo.
echo W-A1; D-B2; S-A3
set/p "menu=>> "
if %menu%==A goto A1
if %menu%==S goto B2
if %menu%==D goto C1
PAUSE >NUL
:B2
CLS
echo       A   B   C
echo 1 
echo 2      V
echo 3
Type script\odd1.odd
echo.
echo W-B1; A-A2; S-B3; D-C2
set/p "menu=>> "
if %menu%==W goto B1
if %menu%==A goto A2
if %menu%==S goto B3
if %menu%==D goto C2
PAUSE >NUL
:B3
CLS
echo       A   B   C
echo 1 
echo 2
echo 3      V
Type script\odd1.odd
echo.
echo W-A1; D-B2; S-A3
set/p "menu=>> "
if %menu%==W goto B2
if %menu%==A goto A3
if %menu%==D goto C3
PAUSE >NUL
:C1
CLS
echo       A   B   C
echo 1          V
echo 2
echo 3
Type script\odd1.odd
echo.
echo A-B1; S-C2;
set/p "menu=>> "
if %menu%==A goto B1
if %menu%==S goto C2
PAUSE >NUL
:C2
CLS
echo       A   B   C
echo 1 
echo 2          V
echo 3
Type script\odd1.odd
echo.
echo W-C1; A-B2; S-C3
set/p "menu=>> "
if %menu%==W goto C1
if %menu%==A goto B2
if %menu%==S goto C3
PAUSE >NUL
:C3
CLS
echo       A   B   C
echo 1 
echo 2
echo 3          V
Type script\odd1.odd
echo.
echo W-A1; A-B2;
set/p "menu=>> "
if %menu%==A goto B3
if %menu%==W goto C2
PAUSE >NUL

@edit Tylko jeden kod przykladowy jakbyś mógł podać. plis.

BienQsim - 02-10-2013 20:25:43

Ok i mam rozumieć, że choice działa na tej samej zasadzie?

BienQsim - 02-10-2013 20:28:52

Mogę dostać link? I już się nie odzywam ;D

BienQsim - 02-10-2013 21:10:45

thx

noogai2005 - 19-11-2013 14:30:15

MrKris7100 napisał:

Kod:

@echo off
:menu
cls
echo Menu:
echo 1) Menu1
echo 2) Menu2
(...)
set/p "menu=>> "
if %menu%==1 goto menu1
if %menu%==2 goto menu2
:menu1
cls
echo Menu1
echo Menu - dowolny klawisz
pause>nul
goto menu
:menu2
cls
echo Menu2
echo Menu - dowolny klawisz
pause>nul
goto menu

Nie lepiej tak?:

Kod:

@echo off
mode con cols=40 lines=50
:menu
cls
echo Menu:
echo 1) Menu1
echo 2) Menu2
set/p "menu=>> "
if %menu%==1 goto menu1
if %menu%==2 goto menu2
if NOT %menu%==1 ( If NOT %menu%==2 goto menu )
:menu1
cls
echo Menu1
echo Menu - dowolny klawisz
pause>nul
goto menu
:menu2
cls
echo Menu2
echo Menu - dowolny klawisz
pause>nul
goto menu

Jeśli użytkownik nie wpiszę 1 albo 2 nie przejdzie do następnego menu tylko znowu idzie do menu które jest na początku

noogai2005 - 19-11-2013 17:36:56

rafxcrash napisał:

A no jemu to potrzebne xD

Nie potrzebne mi

noogai2005 - 19-11-2013 17:56:18

Mac napisał:

Potrzebne, potrzebne, bo bzdury piszesz.

Nie pisze bzdur

noogai2005 - 19-11-2013 18:02:29

Mac napisał:

A co, gdy %menu% będzie równe 3?

Przejdzie do menu które jest na początku

skupu - 02-12-2013 00:42:28

A ja chciałbym, żeby skrypt robił coś w zależności od wyniku komendy:

devcon status "*DEV_4365"

Wynik:

PCI\VEN_14E4&DEV_4365&SUBSYS_00161028&REV_01\4&3B963279&0&00E0
    Name: Karta Dell Wireless 1704 802.11b/g/n (2,4 GHz)
    Driver is running.
1 matching device(s) found.


No i teraz jeśli jest running, to chciałbym żeby:

devcon disable "*DEV_4365"

A jeśli disabled, to:

devcon enable "*DEV_4365"

Da się jakoś to zrobić?

Piotr

skupu - 03-12-2013 09:44:56

OK. A czy to może być batch odwołujący się do plików z tamtymi skryptami?

Na przykład:

jeżeli output z pliku 1
to plik2
jeśli nie to plik3

Konkretnie to nie wiem jak zassać wynik z tego pierwszego polecenia...

SnopekNooba - 09-12-2013 06:44:32

przydatne ale powinna byc druga czesc bardziej zaawansowane programy i komendy

Matijas114 - 12-03-2014 08:31:28

Ludzie nie wpisujcie komendy shutdown -s -t !!!!!
nie jest to skrót od wyłączania kompa tylko do odpowiednich miejsc na oprogramowaniu przy okazji wyłączających kompa wymyslonych dla takich debili co mysla ze sie znaja na kompach jak my!
za kazdym uzyciem tej komendy karta graficzna jest po prostu "dziurawiona" to oznacza ze usuwane sa losowo poszczegolne linijki kodu w oprogramowaniu karty!
zjebalo mi to kompa... dobrze radze - nie uzywac tego!

AnnStillmoy - 12-03-2014 15:44:26

Matijas114 napisał:

Ludzie nie wpisujcie komendy shutdown -s -t !!!!!
nie jest to skrót od wyłączania kompa tylko do odpowiednich miejsc na oprogramowaniu przy okazji wyłączających kompa wymyslonych dla takich debili co mysla ze sie znaja na kompach jak my!
za kazdym uzyciem tej komendy karta graficzna jest po prostu "dziurawiona" to oznacza ze usuwane sa losowo poszczegolne linijki kodu w oprogramowaniu karty!
zjebalo mi to kompa... dobrze radze - nie uzywac tego!

To troll >_< wyjdź dzieciaku.

tanie szamba z dnem transport samochodów z niemiec grzejniki purmo we wrocławiu torby papierowe z nadrukiem Piła najtansze-zaproszenia-slubne.eu