A Windows rendszerben futtatott parancsok vagy kötegelt munkák viselkedésének naplózására és hibaelhárítására az egyik leghasznosabb módszer a kimenet átirányítása egy fájlba.
A parancssori írást azonban többféleképpen is átirányíthatja egy fájlba. A választott lehetőség attól függ, hogyan szeretné a parancsok kimenetét megjeleníteni.
Hogyan működik a Windows parancssor kimenete
Amikor a Windows konzolon (parancssor) beír egy parancsot, a parancs kimenete két külön folyamba kerül.
- STDOUT: Standard Out: A parancsok szabványos válaszai ide kerülnek. Például a DIR parancs szabványos válasza a könyvtáron belüli fájlok listája.
- STDERR: A szabványos hibaüzenetek oda kerülnek, ha a paranccsal probléma adódik. Ha például nincsenek fájlok a könyvtárban, a DIR parancs a “File Not Found” (Fájl nem található) üzenetet adja ki a Standard Error folyamba.
A Windowsban mindkét kimeneti folyam esetében átirányíthatja a kimenetet egy fájlba.
Redirect Standard Output Write to New File
A parancs standard kimenetét kétféleképpen irányíthatja át egy fájlba. Az első az, hogy a parancs kimeneti írását egy új fájlba küldjük minden alkalommal, amikor a parancsot futtatjuk.
Ehhez nyissuk meg a parancssort, és írjuk be:
dir test.exe > myoutput.txt
A > karakter utasítja a konzolt, hogy az STDOUT kimenetet a megadott nevű fájlba adja ki.
A parancs futtatásakor észre fogja venni, hogy a parancsablakban nem jelenik meg semmilyen válasz, kivéve azt a hibát, hogy a fájl nem létezik.
Ez azért van, mert a parancs standard kimenete a myoutput.txt nevű fájlba lett átirányítva. A fájl most ugyanabban a könyvtárban létezik, ahol a parancsot futtatta. A standard hibakimenet továbbra is a szokásos módon jelenik meg.
Figyeljen arra, hogy a parancs futtatása előtt változtassa meg a parancssor aktív könyvtárát. Így tudni fogja, hogy a kimeneti fájlok hol tárolódnak.
A parancsablakban a “myoutput.txt” beírásával megtekintheti a szabványos kimenetet, amely a fájlba került. Ez megnyitja a szöveges fájlt az alapértelmezett szöveges fájlnézőben. A legtöbb ember számára ez általában a Notepad.exe.
A következő alkalommal, amikor ugyanazt a parancsot futtatja, az előző kimeneti fájl törlődik. Egy új kimeneti fájl jön létre újra a legutóbbi parancs kimenetével.
A standard kimenet átirányítása ugyanabba a fájlba ír
Mi van, ha nem akarja ugyanazt a fájlt felülírni? Egy másik lehetőség, hogy >> helyett >-t használunk a kimeneti fájlba való átirányításhoz. Ennek a példának az esetében a következőt írná be:
dir test.exe >> myoutput.txt
Az eredmény ugyanaz lesz (csak a hiba).
De ebben az esetben a kimeneti fájl felülírása helyett ez a parancs az új kimenetet a meglévő kimeneti fájlhoz csatolja.
Minden alkalommal, amikor egy parancsot futtat, és a kimenetet egy fájlhoz csatolja, az új szabványos kimenetet a meglévő fájl végére írja.
Szabványos hiba átirányítása egy fájlba
Ahogyan a szabványos kimeneti írásokat is átirányíthatja egy fájlba, a szabványos hibafolyamot is kiadhatja egy fájlba.
Ezhez a parancs végéhez a 2> parancsot kell hozzátennie, majd a létrehozni kívánt kimeneti hibafájlt.
Ebben a példában a parancsot írja be:
dir test.exe > myoutput.txt 2> output.err
Ez a standard kimeneti folyamot a myoutput.txt, a standard hiba folyamot pedig az output.err fájlba küldi. Az eredmény az, hogy a konzolablakban egyáltalán nem jelenik meg kimeneti folyam.
A hibaüzeneteket azonban az output.err beírásával láthatja. Ez megnyitja a fájlt az alapértelmezett szöveges fájlnézőben.
Mint láthatja, a parancsból származó hibaüzenetek a hibafájlba kerülnek. A standard kimenethez hasonlóan a >> helyett használhatja a >>-t, hogy a hibát a korábban futtatott parancsok hibáihoz csatolja.
Minden kimeneti írást ugyanabba a fájlba irányít
A fenti megközelítések mindegyike több fájlt eredményez. Az egyik fájl a szabványos kimeneti folyam, a másik pedig a szabványos hiba folyam.
Ha mindkét kimenetet ugyanabba a fájlba szeretnénk felvenni, azt is megtehetjük. Ehhez csak át kell irányítania az összes kimenetet ugyanabba a fájlba a következő parancs segítségével.
dir test.exe 1> myoutput.txt 2>&1
Íme, hogyan működik ez a parancs:
- A standard kimenet az 1-es kimeneti számmal azonosított kimeneti fájlba kerül.
- A 2-es számmal azonosított standard hibakimenet az 1-es számmal azonosított kimeneti fájlba kerül átirányításra.
Ez a hibakimenetet a standard kimenet végéhez csatolja.
Ez egy hasznos módja annak, hogy bármely parancs összes kimenetét egy fájlban láthassa.
Szokásos vagy hiba kimeneti folyamok elnémítása
A szabványos kimenetet vagy a szabványos hibát úgy is kikapcsolhatja, hogy a kimenetet egy fájl helyett egy NUL-ba irányítja át.
A fenti példát használva, ha csak a Standard Outputot szeretné, a Standard Error-t pedig egyáltalán nem, akkor a következő parancsot használhatja:
dir test.exe 1> myoutput.txt 2>nul
Ez ugyanazt a kimeneti fájlt fogja eredményezni, mint a fenti első példa, ahol csak a Standard Outputot irányította át, de ezzel a paranccsal a hiba nem fog visszhangozni a konzolon belül. Hibanaplófájlt sem hoz létre.
Ez akkor hasznos, ha nem törődik a hibákkal, és nem akarja, hogy zavaróvá váljanak.
A fenti kimeneti parancsok bármelyikét elvégezheti egy BAT-fájlon belülről, és az adott sor kimenete az Ön által megadott kimeneti fájlba kerül. Ez egy hasznos módja annak, hogy lássuk, hogy a BAT fájlon belül bármelyik parancsnak volt-e hibája, amikor megpróbálták lefuttatni.