Učebnica

per aspera ad astra

Nástroje používateľa

Nástoje správy stránok


dos:bat_subor

BAT súbor

V systémoch MS-DOS a Windows existuje jeden špeciálny typ súboru, ktorý nesie príponu BAT. Stručne povedané, je to zoznam jednotlivých príkazov, ktoré sa majú postupne vykonať. Jeden riadok obsahuje jeden príkaz, ktorý sa má vykonať. Ak sa vykoná príkaz, potom sa prečíta ďalší riadok a vykoná sa.

Vedeli ste, že väčšina (skoro všetky) súbory BAT z MS-DOS fungujú aj v systémoch Windows ?

Jednoduchý BAT súbor

Ukážeme si jednoduchý súbor BAT, ktorý nás na začiatku upozorní na formátovanie diskety a potom spustí príkaz na formátovanie.

formatuj.bat
@echo off
 
echo Formatujem disketu A: ...
 
format a:

Náš súbor BAT obsahuje tri príkazy. Prvý príkaz @echo off zabráni vypisovaniu jednotlivých riadkov súboru BAT na obrazovku (ak nerozumieste, skúste riadok s @echo off vymazať a spustiť súbor znovu). Ďalši príkaz v poradí echo vypíše na obrazovku text, ktorý sa na tomto riadku nachádza (ach chcete prázdny riadok, zadajte echo.). A posledný príkaz je format a:, ktorý formátuje disketu. Ak jednotlivým príkazom nerozumiete, pozrite si príkazy pre MS-DOS.

Parametry súboru

Ak ste si úspešne vyskúšali prvý súbor, môžeme ho rozšíriť o parametry. Parametry zistíme pomocou premenných %0%9 na otestovanie si vytvorte súbor:

parametry.bat
@echo off
@echo Zadali ste: %1 %2 %3 %4 %5 %6 %7 %8 %9

Šikovnejší z Vás si isto všimli, že v popise som písal od %0 ale v súbore parametry.bat som začal od %1. Urobil som to preto, lebo %0 vráti nultý parameter, teda príkaz, ktorý ste spustili. Ak nerozumiete, pripíšte si aj %0 do súboru.

Teraz si môžeme upraviť súbor formatuj.bat takto:

formatuj.bat
@echo off
 
echo Formatujem disketu %1 ...
 
format %1

Teraz ho môže spustiť príkazom:

formatuj a:

alebo

formatuj b:

Parametry cesty

Z jednotlivých parametrov (%0%9) môžeme získať jednotlivé fragmenty cesty k súboru. Cesta môže byť napríklad C:\DOS\format.exe.

%~d1 Získame písmenu disku
%~p1 Získame adresár
%~n1 Získame meno súboru
%~x1 Získame príponu súboru
%~z1 Vráti veľkosť súboru

Číslo uvedené v príkazov v tabuľke hore (1) označuje z ktorého parametru získavamé údaje a môže byť v rozpätí 0 až 9.

Podmienky a skoky

Ak ste si vyskúšali náš formátovací súbor, zistili ste, že nemá ošetrené chyby. Teda ak aj nezadáte parameter, bude sa tváriť, že formátuje i keď neformátuje. Toto si môžeme ošetriť podmienkou a skokmi.

Podmienky

Môžeme v súbore použiť 4 základné zápisi podmienky

IF "%1" == "" echo Nezadali ste parameter
IF "%1" == "help" echo Potrebujete pomoc?
IF EXIST "%1" echo Subor %1 existuje.
IF NOT EXIST "%1" echo Subor %1 Neexistuje

Prvý riadok s príkazom IF otestuje prvý parameter (%1) či obsahuje nejaký text a ak neobsahuje text, spustí príkaz echo. Druhý riadok otestuje prvý parameter (%1) či obsahuje text help a keď ho obsahuje, spustí príkaz echo. V tretom riadku kontrolujeme, či súbor v príkaze %1 existuje. Ak sa nájde, potom sa vykoná príkaz (v príklade opäť echo). Nakoniec kontrolujeme neexistenciu súboru.

Skoky

Skoky sa prevádzajú pomocou príkazu goto, ktorý skáče na návestia. Návestie je „značka“ v súbore, na ktorú dokážeme „skočiť“. Nasledujúci súbor nemá žiaden praktický zmysel, iba Vám ukáže ako dokážeme skákať

skoky.bat
@echo off
echo Zacinam skakat ...
goto Stred
 
:Zaciatok
echo Som na zaciatku
goto Koniec
 
:Stred
echo Som v strede
goto Zaciatok
 
:Koniec
echo Koncim

Ak predsa chcete používať návestia, nemusíme vytvárať návestie :Koniec, lebo štandardne každý BAT súbor obsahuje na konci súboru návestie :EOF. Potom by sme použili
goto EOF.

Súbor s podmienkami a skokmi

Teraz keď už viete ako použiť podmienky a skoky, prepíšeme si náš súbor formátuj.

formatuj.bat
@echo off
IF "%1" == "" goto Chyba
 
echo Formatujem disketu %1 ...
format %1
goto Koniec
 
:Chyba
echo Zabudli ste zadat parameter disku, ktory chcete formatovat.
echo.
echo Zadajte formatuj A: alebo formatuj B:
 
:Koniec

Súbor máme ošetrný a teraz si popíšeme ako funguje. Na začiatku sa skontroluje, či je zadaný prvý paramter, ak nie, skočíme na návestie Chyba ak áno, nič sa nedeje.

Namiesto skoku na návestie :Koniec a príkazu goto Koniec môžeme jednoducho riadok goto Koniec nahradiť príkazom Exit, ktorým dosiahneme ukončenie súboru BAT.

Po formátovaní disku máme znovu skok, to preto, aby sa príkaz nevykonával ďalej a nevypísal chybu.

Premenné

V systéme MS-DOS ako aj Windows existuje niekoľko premenných. Ich kompletný zoznam môžete vypísať príkazom:

set

Premenné môžeme vytvárať, mazať alebo upravovať podľa potreby. Napríklad premenná %PATH% ukladá zoznam adresárov, kde sa hľadá súbor, ktorý spúšťate. Ak chcete spustiť napríklad scandisk nemusíte napísať C:\DOS\scandisk ale iba scandisk, lebo C:\DOS sa nachádza v premennej %PATH%.

Sú aj špeciálne premenné, ktoré príkazom set nezistíte:

%CD% aktuálny adresár
%CMDLINES% Celý riadok s príkazom, ako bol spustený
%DATE% Aktuálny dátum
%TIME% Aktuálny čas
%RANDOM% Náhodné číslo
mojemeno.bat
@echo off
 
set premenna="Moje meno"
 
echo Vase meno je %premenna%.
echo Nechcete si ho zmenit?
echo.
set /P premenna=Zadejte meno: 
 
echo Vase nove meno je: %premenna%

Súbor mojemeno.bat na začiatku nastaví premennú premenna na „Moje meno“, potom toto meno vypíše, požiada Vás o zmenu mena a nakoniec znovu vypíše zmenené meno.

Reťazec znakov môžete ľubovoľne skracovať podľa potreby, napríklad takto:

%premenna:~-3% Vráti posledné 3 znaky z premennej
%premenna:~2,6% Vráti znaky na pozícii 2 až 6
%premenna:~0,-3% Vráti celý reťazec okrem posledných 3 znakov

Spúštanie programov

Príkaz start sa používa ak chcete spustiť program alebo skript (BAT súbor) ale nechcete čakať až na jeho skončenie. Príkazy môžete spúšťať aj bez tohto príkazu, ale potom sa bude čakať, až kým neskončia.

Dôležitošt príkazu call spočíva v spúštaní ďalších BAT súborov. Za normálnych okolností, akonáhle spustíte z BAT súboru BAT súbor, po vykonaní druhého BAT súboru sa vykonávanie príkazov nevráti naspať do prvého. Práve preto BAT súbory potrebujeme spušťať príkazom call.

Cyklus

Niekedy potrebujeme použiť aj cykly aby sa program, alebo jeho časť niekoľko krát vykonala dookola podľa potreby.

Pozor! Premenné pre cyklus začínajú vždy dvoma %%.

Na najjednoduchšom cykle si ukážeme ako vypísať čísla 2,4,6,8,10

parne.bat
@echo off
 
for /L %%A in (2,4,6,8,10) do (
 
  echo Cislo %%A
 
)

Ďalší spôsob použitia cyklu je vyhľadanie všetkých EXE súborov v danom adresári:

batfiles.bat
@echo off
 
for %%X in (*.EXE) do (
 
  echo %%X
 
)

BONUS

Pasáž s bonusom som prebral z jedného webu asi pred 2 rokmi ale neviem ho spätne dohľadať preto ak to objaví autor, naj sa mi ozve a ho rád pripíšem :-)

for /F "tokens=2,4 delims=; " %%M IN (cykly.txt) DO (
 
  echo Stlpec 2: %%M    Stlpec 4: %%N
 
)

Najsilnejšie využitie cyklu for je v parsováni textových súborov. Pomocou prepínača /F dokážeme prechádzať textové súbory riadok po riadku a každy rozložiť na tzv. tokeny - časti oddelené určitými znakmi. Zadávate iba jednú premennú (M) v ktorej je uložený prvý token. Abecedne ďalšie premenné obsahujú ďalšie tokeny (N).

Ako zistiť aktuálny mesiac pomocou for:

for /F "tokens=2 delims=." %%M in ('date /T') do echo %%M

Chcete nahradiť v reťazci bodky čiarkami?

set retazec=ondrej.kamila.petra.stanislav
set retazec=%retazec:.=,%
echo %retazec%
dos/bat_subor.txt · Posledná úprava: 2016/07/28 16:07 (externá úprava)