Ett av de mest användbara sätten att logga och felsöka beteendet hos kommandon eller batchjobb som du kör i Windows är att omdirigera utdata till en fil.

Det finns dock några olika sätt att omdirigera skrivningar från kommandoraden till en fil. Vilket alternativ du väljer beror på hur du vill visa kommandoutgången.

Hur utgången i Windows kommandotolk fungerar

När du skriver ett kommando i Windows-konsolen (kommandotolken) skickas utgången från det kommandot till två separata flöden.

  • STDOUT: Standard Out: Standard Out är det ställe där alla standardsvar från kommandon hamnar. Exempelvis är standardsvaret för kommandot DIR en lista över filer i en katalog.
  • STDERR: Standard Error är det ställe där eventuella felmeddelanden hamnar om det finns problem med kommandot. Om det till exempel inte finns några filer i katalogen kommer kommandot DIR att skicka ut ”File Not Found” till strömmen Standard Error.

Du kan omdirigera utdata till en fil i Windows för båda dessa utdataströmmar.

Redirect Standard Output Write to New File

Det finns två sätt att omdirigera standardutdata från ett kommando till en fil. Det första är att skicka kommandoutgången skriva till en ny fil varje gång du kör kommandot.

För att göra detta öppnar du kommandotolken och skriver:

dir test.exe > myoutput.txt

Tecknet > talar om för konsolen att skriva ut STDOUT till filen med det namn som du har angett.

När du kör det här kommandot kommer du att märka att det inte kommer något svar i kommandofönstret förutom felet att filen inte finns.

Detta beror på att standardutmatningen för kommandot omdirigerades till en fil som heter myoutput.txt. Filen finns nu i samma katalog där du körde kommandot. Standardfelutgången visas fortfarande som den normalt gör.

Anmärkning: Var noga med att ändra den aktiva katalogen för kommandotolken innan du kör kommandot. På så sätt vet du var utdatafilerna lagras.

Du kan visa standardutmatningen som gick till filen genom att skriva ”myoutput.txt” i kommandofönstret. Detta kommer att öppna textfilen i din standard textfilvisare. För de flesta är detta vanligtvis Notepad.exe.

Nästa gång du kör samma kommando raderas den tidigare utdatafilen. En ny utdatafil kommer att återskapas med det senaste kommandots utdata.

Redirect Standard Output Writes to the Same File

Vad händer om du inte vill skriva över samma fil? Ett annat alternativ är att använda >> i stället för > för att omdirigera till en utdatafil. I det här exemplet skulle du skriva:

dir test.exe >> myoutput.txt

Du får se samma utdata (endast felet).

Men i det här fallet, i stället för att skriva över utdatafilen, lägger det här kommandot till den nya utdata till den befintliga utdatafilen.

Varje gång du kör ett kommando och lägger till utdata till en fil skriver det nya standardutdata till slutet av den befintliga filen.

Omdirigera standardfel till en fil

På samma sätt som du kan omdirigera skrivningar av standardutdata till en fil kan du också skicka ut standardfelströmmen till en fil.

För att göra detta måste du lägga till 2> i slutet av kommandot följt av den utdatafelfil du vill skapa.

I detta exempel skriver du kommandot:

dir test.exe > myoutput.txt 2> output.err

Detta skickar standardutdataströmmen till myoutput.txt och standardfelströmmen till output.err. Resultatet är att ingen utdataström alls visas i konsolfönstret.

Däremot kan du se felmeddelanden genom att skriva output.err. Detta kommer att öppna filen i din standard textfilvisare.

Som du kan se, skrivs alla felmeddelanden från kommandot ut till felfilen. Precis som med standardutgången kan du använda >> i stället för att lägga felet till fel från tidigare körda kommandon.

Omdirigera alla utskriftsskrivningar till en och samma fil

Alla tillvägagångssätt ovan resulterar i flera filer. En fil är för standardutdataströmmen och den andra för standardfelströmmen.

Om du vill inkludera båda dessa utdata i samma fil kan du också göra det. För att göra detta behöver du bara omdirigera all utdata till samma fil med hjälp av följande kommando.

dir test.exe 1> myoutput.txt 2>&1

Så här fungerar kommandot:

  • Standardutmatningen omdirigeras till utdatafilen som identifieras av utdata nummer 1.
  • Standardfelutmatningen som identifieras av nummer 2 omdirigeras till utdatafilen som identifieras av nummer 1.

Detta kommer att foga felutmatningen till slutet av standardutmatningen.

Det här är ett användbart sätt att se all utmatning för ett kommando i en fil.

Släck standard- eller felutgångsströmmar

Du kan också stänga av antingen standardutgång eller standardfel genom att omdirigera utmatningen till ett NUL i stället för till en fil.

Om du använder exemplet ovan, om du bara vill ha Standard Output och inget Standard Error alls, kan du använda följande kommando:

dir test.exe 1> myoutput.txt 2>nul

Detta kommer att resultera i samma utdatafil som det första exemplet ovan där du bara omdirigerade Standard Output, men med det här kommandot kommer felet inte att eka i konsolen. Det kommer inte heller att skapa en felloggfil.

Detta är användbart om du inte bryr dig om några fel och inte vill att de ska bli en olägenhet.

Du kan utföra något av samma utdatakommandon ovan inifrån en BAT-fil och utmatningen från den raden kommer att gå till den utdatafil du anger. Detta är ett användbart sätt att se om något av kommandona i en BAT-fil hade några fel när de försökte köras.

Lämna ett svar

Din e-postadress kommer inte publiceras.