Een van de handigste manieren om het gedrag van opdrachten of batchtaken die u onder Windows uitvoert te loggen en problemen op te lossen, is door de uitvoer om te leiden naar een bestand.
Er zijn echter een paar verschillende manieren waarop u de uitvoer van de opdrachtregel kunt omleiden naar een bestand. Welke optie u kiest, hangt af van hoe u uw opdrachtuitvoer wilt bekijken.
Hoe de uitvoer van de opdrachtprompt van Windows werkt
Wanneer u een opdracht typt in de Windows-console (opdrachtprompt), gaat de uitvoer van die opdracht naar twee afzonderlijke stromen.
- STDOUT: Standard Out is waar alle standaardantwoorden van commando’s naartoe gaan. Bijvoorbeeld het standaard antwoord voor het DIR commando is een lijst van bestanden in een directory.
- STDERR: Standard Error is waar eventuele foutmeldingen heen gaan als er een probleem is met het commando. Als er bijvoorbeeld geen bestanden in de directory staan, zal het DIR-commando “File Not Found” naar de standaard foutstroom sturen.
U kunt de uitvoer naar een bestand omleiden in Windows voor beide uitvoerstromen.
Redirect Standard Output Write to New File
Er zijn twee manieren waarop u de standaarduitvoer van een opdracht naar een bestand kunt omleiden. De eerste is om de opdrachtuitvoer naar een nieuw bestand te schrijven telkens wanneer u het commando uitvoert.
Om dit te doen, opent u de opdrachtprompt en typt u:
dir test.exe > myoutput.txt
Het teken > vertelt de console om STDOUT uit te voeren naar het bestand met de naam die u hebt opgegeven.
Wanneer u deze opdracht uitvoert, zult u merken dat er geen enkele reactie in het opdrachtvenster verschijnt, behalve de foutmelding dat het bestand niet bestaat.
Dit komt omdat de standaarduitvoer voor de opdracht is omgeleid naar een bestand met de naam myoutput.txt. Het bestand staat nu in dezelfde directory als waarin u de opdracht uitvoerde. De standaardfoutuitvoer wordt nog steeds weergegeven zoals normaal.
Note: Zorg ervoor dat u de actieve directory voor de opdrachtprompt wijzigt voordat u de opdracht uitvoert. Zo weet u waar de uitvoerbestanden worden opgeslagen.
U kunt de standaarduitvoer bekijken die naar het bestand is gegaan door “myoutput.txt” in het opdrachtvenster te typen. Dit zal het tekstbestand openen in uw standaard tekstbestand viewer. Voor de meeste mensen is dit meestal Notepad.exe.
De volgende keer dat u dezelfde opdracht uitvoert, wordt het vorige uitvoerbestand gewist. Er wordt een nieuw uitvoerbestand aangemaakt met de uitvoer van de laatste opdracht.
Redirect Standard Output Writes to the Same File
Wat als u niet hetzelfde bestand wilt overschrijven? Een andere optie is om >> te gebruiken in plaats van > om door te sturen naar een uitvoerbestand. In het geval van dit voorbeeld zou u typen:
dir test.exe >> myoutput.txt
U krijgt dezelfde uitvoer te zien (alleen de fout).
Maar in dit geval, in plaats van het uitvoerbestand te overschrijven, voegt deze opdracht de nieuwe uitvoer toe aan het bestaande uitvoerbestand.
Telkens wanneer u een opdracht uitvoert en de uitvoer toevoegt aan een bestand, wordt de nieuwe standaarduitvoer aan het einde van het bestaande bestand geschreven.
Redirect Standard Error To a File
Op dezelfde manier waarop u de standaarduitvoer naar een bestand kunt omleiden, kunt u ook de standaardfoutstroom naar een bestand uitvoeren.
Om dit te doen, moet u 2> aan het einde van de opdracht toevoegen, gevolgd door het uitvoerfoutbestand dat u wilt maken.
In dit voorbeeld typt u de opdracht:
dir test.exe > myoutput.txt 2> output.err
Dit stuurt de standaard uitvoerstroom naar myoutput.txt, en de standaard foutstroom naar output.err. Het resultaat is dat er helemaal geen uitvoerstroom wordt weergegeven in het consolevenster.
U kunt de foutmeldingen echter wel zien door output.err te typen. Hierdoor wordt het bestand geopend in uw standaard tekstbestandsviewer.
Zoals u kunt zien, worden alle foutmeldingen van de opdracht naar het foutbestand uitgevoerd. Net als bij de standaarduitvoer, kunt u >> gebruiken om de fout toe te voegen aan fouten van eerder uitgevoerde opdrachten.
Alle uitvoer naar hetzelfde bestand sturen
Alle bovenstaande benaderingen resulteren in meerdere bestanden. Het ene bestand is voor de standaard uitvoerstroom en het andere is voor de standaard foutstroom.
Als u beide uitgangen in hetzelfde bestand wilt opnemen, kunt u dat ook doen. Daarvoor hoeft u alleen maar alle uitvoer naar hetzelfde bestand om te leiden met het volgende commando.
dir test.exe 1> myoutput.txt 2>&1
Hier ziet u hoe dit commando werkt:
- De standaarduitvoer wordt naar het uitvoerbestand geleid dat wordt aangeduid met uitvoernummer 1.
- De standaard foutuitvoer met nummer 2 wordt omgeleid naar het uitvoerbestand met nummer 1.
Dit voegt de foutuitvoer toe aan het einde van de standaard uitvoer.
Dit is een handige manier om alle uitvoer voor een opdracht in één bestand te zien.
Silencing Standard or Error Output Streams
U kunt de standaarduitvoer of de standaardfout ook uitschakelen door de uitvoer om te leiden naar een NUL in plaats van een bestand.
Uitgaande van het bovenstaande voorbeeld, als u alleen Standaard Uitvoer wilt en helemaal geen Standaard Fout, kunt u het volgende commando gebruiken:
dir test.exe 1> myoutput.txt 2>nul
Dit zal resulteren in hetzelfde uitvoerbestand als het eerste voorbeeld hierboven waar u alleen de Standaard Uitvoer omleidde, maar met dit commando zal de fout niet echoën in de console. Er wordt ook geen foutlogbestand aangemaakt.
Dit is handig als u niet om fouten geeft en ze niet tot last wilt zijn.
U kunt alle bovenstaande uitvoeropdrachten uitvoeren vanuit een BAT-bestand en de uitvoer van die regel gaat naar het uitvoerbestand dat u opgeeft. Dit is een handige manier om te zien of er fouten zijn opgetreden bij het uitvoeren van de commando’s in een BAT-bestand.