Príkazový riadok a premenné, príkaz echo off v dávkových súboroch

Ako sme si spomínali, príkazovému riadku možno zadávať príkazy, ktorým sa predávajú parametre. Pričom niektoré z nich predstavujú takzvané prepínače a ich voľby, iné parametre môžu predstavovať cesty k súborom alebo adresárom. Možností je však viac. Príkazový riadok je interaktívny, vždy spracováva iba jeden príkaz. Ne-interaktívny spôsob práce príkazového riadku predstavujú dávkové súbory. Je to akoby sme pracovali interaktívne a potom všetky príkazy spísali do jedného zoznamu a ten zapísali do textového súboru. Tento textový súbor ale musí mať príponu .bat, inak príkazový riadok nepochopí, že ide o dávkový súbor, kde sú príkazy, ktoré treba vykonať.

Pri určitých príležitostiach je praktické, ak danú hodnotu parametra zadá užívateľ iba raz a táto sa opakovane použije. Toto zabezpečujú premenné, ktoré delíme na zadané užívateľom a na systémové. Jednu takú praktickú systémovú premennú sme si už predstavili. Bola to premenná %PATH% . 

Premennú je možné vytvoriť pomocou príkaz set. Tu je ilustratívny príklad:

@echo off 
set premenna=Ahoj
echo %premenna%

Táto postupnosť príkazov, ktorá môže byť zadaná interaktívne, alebo zapísaná v dávkovom súbore, vytvorí premennú s názvom premenna, vloží do nej reťazec Ahoj a potom tento reťazec vypíše.

Na vypisovanie textov a hodnôt premenných slúži príkaz echo. Obvyklý postup interpretera príkazového riadku pri interpretovaní dávkového súboru je ten, že postupuje riadok po riadku, daný riadok dávkového súboru vypíše, potom ho vykoná a výsledok vykonaného príkazu opäť vypíše. Ak pred príkaz v dávkovom súbore napíšeme zavináč, tak sa daný riadok pri interpretovaní dávkového súboru nevypíše. Samotný výsledok príkazu sa ale vypíše. Ak je takých príkazov, ktoré nechceme vypisovať, veľa, je to nepraktické a preto sa takýto prípad ošetruje príkazmi :        
 
echo off  a  echo on 
 
Echo off vypína vypisovanie riadkov a echo on ich zapína. Zmysel to má pri odlaďovaní dlhých dávkových súborov. Vypíname vypisovanie tých časti kódu, ktoré sú odladené. Pokiaľ pred príkaz echo off nedáme zavináč, tak sa tento riadok vypíše, tie nasledujúce za ním už nie. 

Pokiaľ premennú vypisujeme, musí byť uzavretá medzi dvoma znakmi percento. Okrem hore uvedeným spôsobom definovanými premennými existujú prednastavené systémové premenné ako:
 
%CD% - cesta k aktuálnemu adresáru, príkaz echo %CD% je ekvivalentný príkazu cd
%DATE% - aktuálny dátum, príkaz echo %DATE% je ekvivalentný príkazu date /t
%TIME% - aktuálny čas, príkaz echo %TIME% je ekvivalentný príkazu time /t
%ERRORLEVEL% - obsahuje návratový kód posledne prevedeného príkazu
%USERNAME% - obsahuje meno užívateľa
%WINDIR% - obsahuje cestu k platnej inštalácii OS Windows
%TEMP% A %TMP% - obsahuje cesty k adresárom určeným pre dočasné súbory
%PATH% - táto premenná obsahuje zoznam adresárov, ktoré sa prehľadávajú pri pokuse spustiť príkaz, či nejaký vykonateľný súbor (.exe, .bat, alebo iné v prípade ak beží na pozadí windows script host machine)
%PROMPT% - keď zadávame príkaz, tak naľavo od neho je text. Obvykle cesta k aktuálnemu adresáru, ale môže tam byť všeličo iné. Toto sa nastavuje príkazom prompt. Riadiaci znak príkazu prompt sa ukladá do premennej %PROMPT%
%RANDOM% - obsahuje náhodné číslo z intervalu od 0 do 32767

a mnoho iných. Zoznam všetkých premenných, teda aj tých systémových a aj tých zadaných užívateľom získame napísaním príkazu set.

Samotná premenná obvykle obsahuje textový reťazec, ale môže obsahovať aj číslo, s ktorým je možné robiť aritmetické operácie. Uvážme nasledovnú postupnosť príkazov:

set p1=5
set p2=3
set /a "vysl=p1+p2"
echo %vysl%
echo %p1%
echo %p2%

Táto postupnosť vytvorí 3 premenné: p1, p2 a vysl. Tieto samé o sebe sú textové reťazce, ale tieto textové reťazce je možné interpretovať ako čísla a pomocou príkazu set s prepínačom /a s nimi vykonávať aritmetické operácie. V tomto prípade je to sčítanie. Teda príkaz
 
set /a "vysl=p1+p2"

vytvorí novú textová premennú vysl a do nej uloží reťazec predstavujúci súčet premenných p1 a p2. Séria troch príkazov echo tieto premenné vypíše na obrazovku

Povolené aritmetické operácie sú: súčet (+), rozdiel (-), súčin (+), celo-číslené delenie (/) alebo tiež v iných programovacích jazykoch operácia známa ako div,  zvyšok po delení číslom (%) alebo aj operácia známa v iných programovacích jazykoch ako mod - modulo .
Operácie je možné kombinovať ako napríklad:
 
set /a "vysl=p1+p2*30"
set /a "vysl=(p1-p2)*30"

Okrem aritmetických operácii je možné logické binárne operátory ako: bitový posuv doprava (>>) a doľava (<<), logické AND (&), logické OR (|), logické XOR (^) .

Výsledkom všetkých aritmetických a logických operácii budú čísla v desiatkovej sústave, ale možno zadávať aj čísla v hexadecimálnej a osmičkovej sústave. Teda čísla 0xFF (hexadecimálne číslo) a 07 (osmičkové číslo).

S premennými je možné prevádzať aj textové operácie. Predpokladajme, že premenná TEXT obsahuje reťazec ABCDEFGHIJ. Dole uvedené príkazy urobia nasledovné:
 
%TEXT:~3% budú použité znaky počínajúc štvrtým znakom, teda DEFGHIJ
%TEXT:~3,5% bude použitých 5 znakov počínajúc štvrtým, teda DEFGH
%TEXT:~-3% budú použité posledné 3 znaky, teda HIJ
%TEXT:~0,-5% budú použité všetky znaky okrem posledných piatich, teda ABCDE
%TEXT:~-3,-2% budú použité posledné tri znaky okrem posledných dvoch, teda H

Pri používaní premenných je možné tiež nahradiť časť reťazca iným reťazcom. Napríklad

%TEXT:CDE=ahoj%, nahradia sa všetky výskyty podreťazca CDE reťazcom ahoj, teda ABahojFGHIJ
%TEXT:CDE=%, vymažú sa všetky výskyty reťazca CDE, teda ABFGHIJ
%TEXT:*CDE=ahoj%, vymaže všetko po prvý výskyt podreťazca CDE a ten potom nahradí reťazcom ahoj, teda ahojFGHIJ
 
K práci s dávkovými súbormi aj patrí možnosť užívateľa priraďovať vlastné hodnoty premenným a to pomocou príkazu set /p .
 
Napríklad:
 
@echo off
set /p X=Prvy scitanec
set /p Y=Druhy scitanec
set /a "V=X+Y"
echo %V%

tento krátky dávkový súbor načíta vstup od užívateľa do premenných X a Y a potom ich súčet vloží do premennej V, ktorú následne vypíše.

 
 
 
 


Komentáre

Obľúbené príspevky