Jedním z nejužitečnějších způsobů protokolování a řešení problémů s chováním příkazů nebo dávkových úloh spouštěných v systému Windows je přesměrování výstupu do souboru.
Existuje však několik různých způsobů, jak přesměrovat zápis z příkazového řádku do souboru. Zvolená možnost závisí na tom, jak chcete výstup příkazu zobrazit.
- Jak funguje výstup příkazového řádku systému Windows
- Přesměrování standardního výstupu zápisu do nového souboru
- Přesměrování standardního výstupu zapisuje do stejného souboru
- Přesměrování standardní chyby do souboru
- Přesměrování všech výstupních zápisů do stejného souboru
- Utlumení standardního nebo chybového výstupního proudu
Jak funguje výstup příkazového řádku systému Windows
Při zadávání příkazu v konzole systému Windows (příkazovém řádku) se výstup z tohoto příkazu odešle do dvou samostatných proudů.
- STDOUT: Standardní výstup je místo, kam jdou všechny standardní odpovědi z příkazů. Například standardní odpovědí příkazu DIR je seznam souborů uvnitř adresáře.
- STDERR: Standard Error je místo, kam se odesílají případné chybové zprávy, pokud dojde k problému s příkazem. Pokud například v adresáři nejsou žádné soubory, příkaz DIR vypíše do proudu Standard Error zprávu „Soubor nenalezen“.
Pro oba tyto výstupní proudy můžete v systému Windows přesměrovat výstup do souboru.
Přesměrování standardního výstupu zápisu do nového souboru
Existují dva způsoby, jak můžete přesměrovat standardní výstup příkazu do souboru. Prvním z nich je odeslání zápisu výstupu příkazu do nového souboru při každém spuštění příkazu.
Tento postup provedete tak, že otevřete příkazový řádek a zadáte:
dir test.exe > myoutput.txt
Znak > říká konzole, že má výstup STDOUT odeslat do souboru s vámi zadaným názvem.
Při spuštění tohoto příkazu si všimnete, že v příkazovém okně není žádná odezva kromě chyby, že soubor neexistuje.
To proto, že standardní výstup pro příkaz byl přesměrován do souboru s názvem myoutput.txt. Tento soubor nyní existuje ve stejném adresáři, ve kterém jste příkaz spustili. Standardní chybový výstup se stále zobrazuje jako obvykle.
Poznámka: Dejte pozor, abyste před spuštěním příkazu změnili aktivní adresář pro příkazový řádek. Budete tak vědět, kde jsou výstupní soubory uloženy.
Standardní výstup, který se do souboru dostal, můžete zobrazit zadáním příkazu „myoutput.txt“ do příkazového okna. Tím se textový soubor otevře ve výchozím prohlížeči textových souborů. Pro většinu lidí je to obvykle Notepad.exe.
Při dalším spuštění stejného příkazu bude předchozí výstupní soubor smazán. Znovu se vytvoří nový výstupní soubor s výstupem posledního příkazu.
Přesměrování standardního výstupu zapisuje do stejného souboru
Co když nechcete přepisovat stejný soubor? Další možností je použít pro přesměrování do výstupního souboru místo >> >. V případě tohoto příkladu byste zadali:
dir test.exe >> myoutput.txt
Uvidíte stejný výstup (pouze chybu).
V tomto případě však tento příkaz místo přepsání výstupního souboru připojí nový výstup ke stávajícímu výstupnímu souboru.
Při každém spuštění příkazu a připojení výstupu k souboru se nový standardní výstup zapíše na konec stávajícího souboru.
Přesměrování standardní chyby do souboru
Stejným způsobem, jakým můžete přesměrovat zápis standardního výstupu do souboru, můžete do souboru vypisovat i standardní chybový proud.
Chcete-li to provést, musíte na konec příkazu přidat 2> a za něj výstupní chybový soubor, který chcete vytvořit.
V tomto příkladu zadáte příkaz:
dir test.exe > myoutput.txt 2> output.err
Tento příkaz odešle standardní výstupní proud do souboru myoutput.txt a standardní chybový proud do souboru output.err. Výsledkem je, že se v okně konzoly nezobrazí vůbec žádný výstupní proud.
Chybová hlášení však můžete zobrazit zadáním output.err. Tím se soubor otevře ve výchozím prohlížeči textových souborů.
Jak vidíte, všechna chybová hlášení příkazu se vypíší do chybového souboru. Stejně jako u standardního výstupu můžete místo toho použít >> a připojit chybu k chybám z dříve spuštěných příkazů.
Přesměrování všech výstupních zápisů do stejného souboru
Všechny výše uvedené přístupy vedou k vytvoření více souborů. Jeden soubor je určen pro standardní výstupní proud a druhý pro standardní chybový proud.
Pokud chcete oba tyto výstupy zahrnout do stejného souboru, můžete to udělat také. K tomu stačí přesměrovat všechny výstupy do stejného souboru pomocí následujícího příkazu:
dir test.exe 1> myoutput.txt 2>&1
Tento příkaz funguje takto:
- Standardní výstup je přesměrován do výstupního souboru označeného číslem výstupu 1.
- Standardní výstup je přesměrován do výstupního souboru označeného číslem výstupu 1.
- Standardní chybový výstup identifikovaný číslem 2 je přesměrován do výstupního souboru identifikovaného číslem 1.
Tento příkaz připojí chybový výstup na konec standardního výstupu.
Je to užitečný způsob, jak zobrazit veškerý výstup pro libovolný příkaz v jednom souboru.
Utlumení standardního nebo chybového výstupního proudu
Standardní výstup nebo standardní chybu můžete také vypnout přesměrováním výstupu do NUL místo do souboru.
Podle výše uvedeného příkladu, pokud chcete pouze Standardní výstup a vůbec žádnou Standardní chybu, můžete použít následující příkaz:
dir test.exe 1> myoutput.txt 2>nul
Výsledkem bude stejný výstupní soubor jako v prvním příkladu výše, kde jste přesměrovali pouze Standardní výstup, ale při tomto příkazu se nebude uvnitř konzoly ozývat chyba. Nevytvoří ani soubor s chybovým protokolem.
To je užitečné, pokud vás žádné chyby nezajímají a nechcete, aby vás obtěžovaly.
Kterýkoli ze stejných výstupních příkazů uvedených výše můžete provést zevnitř souboru BAT a výstup z tohoto řádku půjde do zadaného výstupního souboru. To je užitečný způsob, jak zjistit, zda některý z příkazů uvnitř souboru BAT nevykazoval při pokusu o spuštění nějaké chyby.