Dávkový soubor
Author
Albert FloresDávkový soubor je v operačním systému DOS, OS/2 a Microsoft Windows textový soubor obsahující sérii příkazů, které jsou zpracovány interpretem příkazového řádku. Když je dávkový soubor spuštěn, interpret (obvykle COMMAND.COM nebo cmd.exe) čte soubor a spouští jednotlivé příkazy, které jsou umístěny na samostatných řádcích. Dávkové soubory jsou užitečné, když je potřeba spustit po sobě několik spustitelných souborů, čehož obvykle využívají administrátoři pro automatizaci zdlouhavých procesů.
DOSové dávkové soubory mají příponu souboru . BAT (velikost písmen nemá vliv). +more Dávkové soubory v jiných prostředích mohou mít jiné přípony, jako například . cmd ve Windows NT a OS/2 nebo . btm ve 4DOS a příbuzných shellech. Mezi příponami . bat a . cmd není rozdíl, pokud jsou spouštěny svým jménem, avšak při použití zástupců jsou dávky s příponou . bat interpretovány 16bitovým COMMAND. COM a dávky s příponou . cmd jsou ve Windows NT interpretovány 32bitovým shellem cmd. exe a jsou povolena všechna rozšíření. Windows 9x rozeznávají pouze příponu . bat.
Historie
Interpret používaný v příkazovém řádku poskytuje dva odlišné režimy: interaktivní režim (ve kterém uživatelé zadávají příkazy do výzvy promptu a které jsou po odeslání klávesou Enter vykonány) a dávkové zpracování (který provádí předdefinovanou sekvenci příkazů). Původní koncept těchto dvou režimů je převzat z unixových shellů stejně jako ostatní textově orientovaná rozhraní s příkazovým řádkem z let kolem roku 1980, jako bylo CP/M, který si zase vzal inspiraci ze systémů TOPS-10 a TOPS-20 od Digital Equipment Corporation.
Dávkové zpracování se v systémech MS-DOS a Microsoft Windows během času vyvíjelo. Přestože jsou dávkové soubory analogií k shellovým skriptům v unixových systémech, jejich omezená syntaxe a množství příkazů způsobují, že nejsou tak univerzálně a široce použitelné. +more Tato omezení vedla k rozvoji pomocných nástrojů, příkazů a dalších rozšíření, jako například v Nortnových utilitách nebo náhradě DOSového shellu 4DOS a později 4NT.
DOS
V systému MS-DOS je interpretem příkazového řádku program COMMAND. COM. +more V dávkách lze používat několik jednoduchých interních příkazů, které provádí přímo COMMAND. COM a programy, které jsou uloženy ve spustitelných souborech (externí příkazy). Nejčastěji používaná je v systémech Windows 95 a Windows 98 dávka AUTOEXEC. BAT, která je automaticky spouštěna při startu systému (je-li přítomna). Systém Windows Me tuto vlastnost nemá.
Windows
Nová linie 32bitového systému Windows NT (včetně Windows 2000, Windows XP a Windows Vista) již není založena na systému MS-DOS, ale má svoje vlastní 32bitové jádro. V nich je přítomen interpret cmd. +moreexe, který je víceméně kompatibilní s interpretem COMMAND. COM, avšak některé vlastnosti chybí a jiné jsou naopak přidány. Proto je z důvodu zajištění lepší kompatibility v systémech NT přítomen i původní COMMAND. COM.
Pro komplexní úlohy je od Windows 98 k dispozici Windows Script Host, který umožňuje spouštění skriptů napsaných v jazyce VBScript, JScript a podobných skriptovacích jazycích. V roce 2006 byl uveden další nástroj nazvaný Windows PowerShell, který je možné používat v systémech Windows XP a novějších.
OS/2
Přestože operační systém OS/2 od IBM podporuje dávkové soubory ve stylu DOSu, obsahuje pokročilý skriptovací jazyk REXX.
Rozšíření
bat: První rozšíření používáno dávkovacího souboru používáno Microsoftem. +more Toto rozšíření běží na MS_DOS a všech verzích Windows pod COMMAND. COM nebo cmd. exe. * . cmd: Používané pro dávkovací soubory v systémech Windows NT pomocí cmd. exe. COMMAND. COM nerozpozná tento typ souboru. K tomu, "set", "path", "assoc" a "prompt" příkazy ovlivňují "errorlevel" pouze po vyhlášení chyby při použití . bat souboru, zatímco . cmd soubor ovlivní "errorlevel" i když chyba nenastane. Zároveň používáno v systémech IBM OS/2. * . btm: Rozšíření používáno pro 4DOS and 4NT. Dávkovací soubory které běží na 4DOS a 4NT jsou rychlejší, většinou delší, jelikož jsou to soubory které se před vykonáním načtou celé, místo toho aby se četly řádek po řádku.
Parametry
COMMAND. COM a cmd. +moreexe podporují několik proměnných (od %0, %1 až po %9) za cílem odkázat na cestu a název dávkového zpracování a prvních devět volajících parametrů přímo z dávkovacího souboru (SHIFT). Neexistující parametry jsou nahrazeny textovým řetězcem nulové délky. Mohou být použité podobně jako proměnná prostředí.
Příklady
Základní příklad
Tento příklad vypíše "Ahoj světe. ", a počká než uživatel zmáčkne libovolnou klávesu, poté se ukončí. +more (Poznámka: Nezáleží na dodržování malých a velkých písmen pokud nepracujeme s proměnnými) @ECHO OFF ECHO Ahoj světe. PAUSE pro spuštění musí být souboru uložen jako . bat (nebo . cmd pro operační systémy Windows-NT) ve formátu prostého textu, většinou psáno v textovém editoru jako například Notepad.
Po spuštění se zobrazí: Ahoj světe! Press any key to continue . . .
Vysvětlení
Soubor je čten řádek po řádku, počínaje od prvního. Symbol @ Na začátku řádku vypíná vypisování aktuálně prováděného příkazu. +more Příkaz ECHO OFF vypne vypisování, dokud není znova spuštěno. Kombinace @ECHO OFF lze většinou najít ve většině dávkovacích souborů na prvním řádku, zabraňujíc vypisování jakýchkoliv příkazů. Na dalším řádku příkaz ECHO Hello World. zobrazí Ahoj světe. Další řádek obsahuje příkaz PAUSE, který zobrazí Press any key to continue . . . a zastaví provádění aktuálního skriptu. Poté, co je zmáčknuta libovolná klávesa se terminál ukončí, jelikož nejsou další příkazy, které by se daly provést. V systémech Windows se dávkovací soubor spouští pomocí Příkazové řádky. Příkaz PAUSE na konci skriptu udržuje okno otevřené, jak dlouho uživatel potřebuje.
Příklad jednoduchého dávkového souboru
@ECHO OFF REM ECHO OFF vypíná vypisování jednotlivých příkazů na terminál REM ECHO. vytiskne prázdný řádek ECHO. +more ECHO Ahoj světe, stiskni klávesu pro start programu APROGRAM. EXE. PAUSE > NUL REM První argument dávky může být předán pomocí "%1" APROGRAM. EXE %1 IF ERRORLEVEL 1 GOTO error ECHO. ECHO APROGRAM byl ukončen v pořádku. GOTO end :error ECHO. ECHO Chyba :end.