Lekce 3 - Proměnné a matematické operace v Batchi

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Z minulého tutoriálu umíme kromě změny barviček vypisovat text. No jo, ale to nám skoro k ničemu není. Co by to bylo za program, pokud by pořád jen něco vykládal? V tomto tutoriálu se naučíme vytvářet proměnné.

Proměnné

Pojďme se shodnout na tom, co je to proměnná (programátoři mi teď jistě odpustí zbytečné vysvětlování). Určitě znáte z matematiky proměnnou (např. x), do které jsme si mohli uložit nějakou hodnotu, nejčastěji číslo. Proměnná je v informatice naprosto to samé - je to místo v paměti počítače, kam si můžeme uložit nějaká data (jméno uživatele, aktuální čas nebo poloměr kruhu pro výpočet jeho obsahu). Toto místo má podle typu proměnné také vyhrazenou určitou velikost, kterou proměnná nesmí přesáhnout.

Proměnná má vždy nějaký datový typ, může to být číslo, znak, text a podobně, záleží na tom, k čemu ji chceme používat. Většinou musíme před prací s proměnnou tuto proměnnou nejdříve tzv. deklarovat, čili říci jazyku jak se bude jmenovat. Jazyk ji v paměti založí a teprve potom s ní můžeme pracovat.

Program vypisující proměnnou

Založte si nový program, který se bude jmenovat vypis.bat. Vložíme do něj základní strukturu a titulek nastavíme na „Vypis promenne“.

@echo off
title Vypis promenne

pause

Kód budeme nyní psát do mezery mezi title a pause. Proměnnou můžeme vytvořit pomocí příkazu set. Přidejme následující kód.

set web=ITnetwork.cz
set autor=193

Dobrá, proměnnou bychom měli vytvořenou. Pokud program spustíme, na první pohled se nic nebude dít. Chtělo by to něco, kde proměnnou vypíšeme. Proměnnou lze vypsat pomocí, nám již známého, příkazu echo - jen před a za název proměnné přidáme znak procenta. Pod řádek s nastavením proměnné vložte tento řádek.

echo Zdroj informaci %web%, autor clanku %web%/portfolio/%autor%

Pokud nyní program spustíte, vypíše nám odkaz na web Itnetwork a odkaz na mé portfolio.

Výpis proměnné v Batch

Ale pro uživatele to pořád není nic zajímavého, pořád vidí pouze výstup. Pojďme si vytvořit nový program, který bude zpracovávat vstup od uživatele.

Program Papoušek

Napíšeme program papoušek, který bude dvakrát opakovat to, co uživatel napsal. Založte si soubor s názvem papousek.bat a vložte do něj základní strukturu. Načíst vstup od uživatele můžeme pomocí opět pomocí příkazu set. Tentokrát k němu ale přidáme přepínač /p. Za rovnítko můžeme vložit nějaký text, který se zobrazí u vstupu. Není to ale povinné.

Nejprve se uživateli, jako každý slušný papoušek, představíme a poté požádáme, aby něco napsal.

echo Ahoj, jsem virtualni papousek Lora, rad opakuji!
set /p opakuj=Napis mi neco:
echo.

Dobrá, nyní máme v proměnné načtenou hodnotu od uživatele. Jelikož vytváříme program, který má opakovat, musíme také napsat nějaký výstup.

echo %opakuj%, %opakuj%!

Na konec ještě vložíme příkaz pause se skrytým textem, aby si uživatel mohl prohlédnout výstup. Program uložíme a spustíme.

Papoušek v Batchi

Program Zdvojnásobovač

Vytvoříme program, který si od uživatele vytáhne číslo a vypíše mu jeho dvojnásobek. Počítání v Batchi probíhá opět pomocí příkazu set, ale tentokrát s přepínačem /A. Založíme si nový soubor, který pojmenujeme dvojnasobek.bat a vložíme do něj základní strukturu. Poté si načteme číslo do proměnné %cislo% a v proměnné %vysledek% jej zdvojnásobíme. Nakonec uživateli vypíšeme výsledek.

set /p cislo=Zadej cislo:
set /a vysledek=%cislo%*2
echo Dvojnasobek je %vysledek%

Program si uložte a zkuste jej spustit. Program je také „blbuvzdorný“. Zkuste si do vstupu napsat nějaké slovo nebo písmeno – program vypíše nulu :-).

Zdvojnásobovač v Batchi

Jednoduchá kalkulačka

Takže počítat již umíme. Co kdybychom si vytvořili jednoduchou kalkulačku v Batchi? Bude opravdu velmi jednoduchá. Na vstupu dostaneme dvě čísla, program poté vypíše výsledky jejich součtu, rozdílu, součinu a podílu. Založte si nový soubor s názvem kalkulacka.bat, do kterého vložíte základní strukturu.

Nejprve uživateli představíme aplikaci, poté si vyžádáme obě čísla.

echo Vitej v kalkulacce. Kdyz mi zadas 2 cisla, spocitam ti spoustu věci!
set /p prvni=Zadej prvni cislo:
set /p druhe=Zadej druhe cislo:
echo.
echo Dekuji za zadani cisel. :-)

Dále si vytvoříme proměnné, do kterých budeme ukládat výsledky jednotlivých operací.

set /a soucet=%prvni%+%druhe%
set /a rozdil=%prvni%-%druhe%
set /a soucin=%prvni%*%druhe%
set /a podil =%prvni%/%druhe%

Výborně, nyní máme výsledky operací uložené v proměnných. Nesmíme zapomenout na tu nejdůležitější věc – vypsat je uživateli.

echo.
echo %prvni%+%druhe% je %soucet%
echo %prvni%-%druhe% je %rozdil%
echo %prvni%*%druhe% je %soucin%
echo %prvni%/%druhe% je %podil%

Systémové proměnné

Systém nám již připravil nějaké proměnné. Většinou obsahují informace o počítači, systému a aktuálním uživateli. Jejich seznam můžeme najít, když do příkazového řádku zadáme příkaz „set“. Mezi nejzajímavější proměnné patří například:

Popis Proměnná Příklad výstupu
Aktuální datum %date% út 17. 02. 2015
Aktuální čas %time% 14:28:12,53
Uživatelské jméno aktuálního uživatele %username% Daniel
Jméno počítače %computername% MujPc
Náhodné číslo od 0 do 32 767 %random% 7030
Složka Windows %windir% C:\WINDOWS
Složka uživatele %userprofile% C:\Users\Daniel
AppData %appdata% C:\Users\Dani­el\AppData\Ro­aming
Program Files %programfiles% C:\Program Files
Domovský oddíl %homedrive% C:
Architektura procesoru %processor_ar­chitecture% AMD64

Jak jsem již zmínil, tyto proměnné nám připravuje systém. Jelikož je příkazový řádek propojený s operačním systémem, je možné změnit výchozí hodnoty těchto proměnných, případně si přidat vlastní globální proměnné. Zkuste si otevřít Ovládací Panely > Systém > (levé menu) Upřesnit nastavení systému > (záložka) Upřesnit > (tlačítko dole) Proměnné prostředí. Zde lze proměnné upravit, vymazat, případně si vytvořit vlastní.

Proměnné prostředí v Batch

 

Stáhnout

Staženo 218x (999 B)
Aplikace je včetně zdrojových kódů v jazyce Batch

 

 

Článek pro vás napsal Daniel Vítek
Avatar
Jak se ti líbí článek?
20 hlasů
Primárně PHP programátor, rád si hraje s Arduinem a píše články do sekce Batch.
Předchozí článek
Editor a první program v Batchi + cvičení
Všechny články v sekci
Příkazový řádek a dávkové soubory
Miniatura
Následující článek
Cvičení k 3. lekci Batche
Aktivity (1)

 

 

Komentáře

Avatar
Creevek
Člen
Avatar
Creevek:19.2.2015 16:55

Batch je fajn umět da se v tom vyblbnout na příklad já jsem nedávno dělal generátor náhodných vět :)

Odpovědět  +1 19.2.2015 16:55
Lenost matka pokroku. Twitter: @Creevek_CZ
Avatar
Jurajs
Člen
Avatar
Jurajs:19.2.2015 18:24

Na batch stačí příkazový řádek, nemusíš mít ani notepad, nebo jiný soft :) ..Ale asi hodně lidí je zvyklá na zvýrazněnou syntax jazyka, tak urcite budou preferovat nějaký program typu notepad atp... :) jinak SUPER článek!!! :)

 
Odpovědět  +1 19.2.2015 18:24
Avatar
ondrasekno04
Člen
Avatar
ondrasekno04:23.2.2015 16:19

Existují v batchy cikly ?

 
Odpovědět 23.2.2015 16:19
Avatar
jargry
Člen
Avatar
Odpovídá na ondrasekno04
jargry:23.2.2015 18:00

Ano cykly existují, podívej se na seznam příkazů http://www.samuraj-cz.com/…azy-windows/#…

 
Odpovědět 23.2.2015 18:00
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na ondrasekno04
Daniel Vítek:23.2.2015 20:35

Existují, pozděj na to budu psát tutoriál. Až bude trochu času :`

Odpovědět 23.2.2015 20:35
Na síti působím už pěknou řádku let. Pokud budeš něco potřebovat, písni mi, pokusím se ti poradit :)
Avatar
p.byrouti
Člen
Avatar
p.byrouti:15.5.2015 17:52

Super tutoriál bavím se u toho skvěle popsané. :)

 
Odpovědět 15.5.2015 17:52
Avatar
Dominik Lev
Člen
Avatar
Dominik Lev:23.1.2016 9:23

Jaký je příkaz k tomu aby mi to nepsalo: Press any key to continue.. ??

 
Odpovědět 23.1.2016 9:23
Avatar
Tomáš Brůna
Redaktor
Avatar
Odpovídá na Dominik Lev
Tomáš Brůna:23.1.2016 9:46

pause >> null

Odpovědět 23.1.2016 9:46
Vi veri universum vivus vici
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Tomáš Brůna
Daniel Vítek:23.1.2016 11:05

Ne, to je špatně.

>> slouží k přesměrování výstupu. V tomto případě to přesměruje do souboru null, který se vytvoří v aktuální složce.

Správně to je takto:

pause > nul
případně
pause >> nul
Odpovědět  +1 23.1.2016 11:05
Na síti působím už pěknou řádku let. Pokud budeš něco potřebovat, písni mi, pokusím se ti poradit :)
Avatar
Tomáš Brůna
Redaktor
Avatar
Odpovídá na Daniel Vítek
Tomáš Brůna:23.1.2016 11:41

Nevím, mě funguje i

pause > n
:D
Odpovědět 23.1.2016 11:41
Vi veri universum vivus vici
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Tomáš Brůna
Daniel Vítek:23.1.2016 12:40

Přečti si co jsem napsal. Já nepsal, že to nefunguje.

Odpovědět  +1 23.1.2016 12:40
Na síti působím už pěknou řádku let. Pokud budeš něco potřebovat, písni mi, pokusím se ti poradit :)
Avatar
Tomáš Brůna
Redaktor
Avatar
Odpovídá na Daniel Vítek
Tomáš Brůna:23.1.2016 12:46

já vím :)
Myslel jsem, pokud myslíš to "null" tak jsem se přepsal. Java na mě nechává následky :D

Odpovědět 23.1.2016 12:46
Vi veri universum vivus vici
Avatar
Martin5001
Člen
Avatar
Martin5001:10.5.2016 16:04

Bylo by možné použít v batchi nějaký konfigurační soubor pro ukládání nastavení?
Představuji si to takto:
:zacatek
@echo off
color 2B // nějaká výchozí barva
color %barva% // barva zvolená v nastavení
:nastaveni
set /p barva=Zadej barvu (např.: 1C):
goto start // vrátí se na začátek a uplatní nastavení
Tohle funguje ale chtěl bych aby se mi zvolená barva uložila do souboru config.txt a použila se při každém spuštění aplikace.
Děkuji za rady.

Editováno 10.5.2016 16:04
 
Odpovědět 10.5.2016 16:04
Avatar
Jan Šenbauer:11.12.2016 2:14

děkuju moc :) právě se tohle učíme ve škole a náš učitel mi za celý týden učení nedokázal pomoct jako ty tady za 2 hodiny :) ještě si přečtu a vyzkouším další z tvých návodů a při testu dostanu konečně za jedan :p aspoň doufám

 
Odpovědět 11.12.2016 2:14
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Jan Šenbauer
Daniel Vítek:11.12.2016 18:27

Díky moc! :) Měl bych ten seriál konečně dopsat :)

Odpovědět 11.12.2016 18:27
Na síti působím už pěknou řádku let. Pokud budeš něco potřebovat, písni mi, pokusím se ti poradit :)
Avatar
Niko Nikola Makarius:7.2.2017 21:13

Ahoj mám dotaz, v čem jsem udělal chybu? Snažil jsem se podle článku o jednoduché kalkulačce, vytvořit "chytřejší" kalkulačku, ale teď jsem se v tom ztratil a nevím jak dál.
Mám to takhle, ale fakt nevím jestli je to dobře.

echo off
color 02
start
echo Hello. Welcome to your own calculator.
set /p first=First number
set /p character=character
set /p second=Second number
echo.
echo Thanks and give me a minute.
set a/ soucet=+
set a/ rozdil=-
set a/ soucin=*
set a/ podil=/
echo.
echo if %soucet% set /p %first%+%second%
echo if %rozdil% set /p %first%-%second%
echo if %soucin% set /p %first%*%second%
echo if %podil% set /p %first%/%second%
go to start

díky moc... vždy mě to pustí jen do zadání čísel a znaku. Řekl bych, že bude chyba někde na konci, ale fakt nevim

 
Odpovědět 7.2.2017 21:13
Avatar
nalimleinad
Člen
Avatar
Odpovídá na Niko Nikola Makarius
nalimleinad:7.2.2017 21:35

Moc s batchem nedělám, ale

  1. "go to" není "goto"
  2. co jsem lehce googlil, tak by to vracení na začátek, popř. do určité části kódu mělo vypadat nějak takto:
echo off
color 02
:start
echo Hello. Welcome to your own calculator.
set /p first=First number
set /p character=character
set /p second=Second number
echo.
echo Thanks and give me a minute.
set a/ soucet=+
set a/ rozdil=-
set a/ soucin=*
set a/ podil=/
echo.
echo if %soucet% set /p %first%+%second%
echo if %rozdil% set /p %first%-%second%
echo if %soucin% set /p %first%*%second%
echo if %podil% set /p %first%/%second%
goto:start

Jinak mi to při prvotním "startu" vždy otevřelo nový příkazový řádek.

 
Odpovědět 7.2.2017 21:35
Avatar
nalimleinad
Člen
Avatar
Odpovídá na Niko Nikola Makarius
nalimleinad:7.2.2017 21:46

Jako další věc, které jsem si všimnul mi přijde divné "echo if", pokud vím, tak podmínky primárně slouží na způsob "if něco do něco", tzn. ve tvém případě
if %soucet% set /p %first%+%second%
popř.
if %soucet% echo %first%+%second%

Ale i tak mi ten tvůj kód moc potom nedává smysl. Zkus hlouběji popsat, čeho jsi chtěl docílt.

 
Odpovědět 7.2.2017 21:46
Avatar
Odpovídá na nalimleinad
Niko Nikola Makarius:8.2.2017 15:58

Předem bych chtěl poděkovat za snahu pomoct mi. Šlo mi o vytvoření lepší kalkulačky, která by uměla rozeznat operace (+,-,*,/) a podle nich dát výsledek, aby nedávala na dvě čísla všechny výpočty. Bohužel jakmile zadám čísla a znak a dám pokračovat, ihned se vypne.

 
Odpovědět 8.2.2017 15:58
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na Niko Nikola Makarius
Petr Čech:8.2.2017 16:20

No a máš na konci pause?

Odpovědět 8.2.2017 16:20
the cake is a lie
Avatar
Odpovídá na Petr Čech
Niko Nikola Makarius:8.2.2017 17:12

úplně na konci??Ano

 
Odpovědět 8.2.2017 17:12
Avatar
Odpovídá na Niko Nikola Makarius
Tomáš Pařízek:15.5.2017 20:26

Toto je správný kód:

@echo off
color 02
echo Hello. Welcome to your own calculator.
set /p first=First number
set /p character=character
set /p second=Second number
echo.
echo Thanks and give me a minute.
set soucet=+
set rozdil=-
set soucin=*
set podil=/
echo.
if %soucet%==%character% ( set /p %first%+%second% )
if %rozdil%==%character% ( set /p %first%-%second% )
if %soucin%==%character% ( set /p %first%*%second% )
if %podil%==%character% ( set /p %first%/%second% )
goto start
 
Odpovědět 15.5.2017 20:26
Avatar
Michal Huff
Člen
Avatar
Odpovídá na Martin5001
Michal Huff:17.5.2017 17:03

Mohlo by to fungovat takhle:

:zacatek
@echo off
call config.bat ::"zavolá" config.bat
:nastaveni
set /p barva=Zadej barvu (např.: 1C):
echo >config.bat color %barva% ::uloží do souboru nastavení barvy, barva se před uložením sama nahradí vstupem uživatele
goto zacatek ::vrátí se na začátek a uplatní nastavení

Dva tipy :

  • v batchi jsou komentáře místo // uvozeny :: nebo rem
  • kód můžeš vkládat pomocí toho tlačítka navrchu, je to tak přehlednějsí :)
 
Odpovědět 17.5.2017 17:03
Avatar
Patrik Pastor:27. června 18:20

Jak muzu udelat aby prikazovy radek prijimal prikazy ne jenom po radcich? Kdyz napisu treba set /p a dam enter tak to automaticky se zepta (to chapu, ale jak udelat, kdyz chcu napsat dalsi promennou?), zkousel jsem proste za to psat (tj udelal jsem mezu a setteroval dalsi promenne), ale to ocividne nejde takto. Jak se to da teda resit v prikazove radce?

 
Odpovědět 27. června 18:20
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 24 zpráv z 24.