Пренасочване на изхода от командния ред на Windows към текстов файл

Един от най-полезните начини за регистриране и отстраняване на неизправности в поведението на команди или пакетни задания, които изпълнявате в Windows , е да пренасочите изхода към файл.

Има обаче няколко различни начина, по които можете да пренасочите записите от командния ред към файл. Избраната от вас опция зависи от това как искате да видите изхода на вашата команда.

Как работи изходът на командния ред на Windows(How Windows Command Prompt Output Works)

Когато въведете команда в конзолата на Windows ( команден ред(command prompt) ), изходът от тази команда отива в два отделни потока.

  • STDOUT : Стандартният изход(Out) е мястото, където отиват всички стандартни отговори от команди. Например стандартният отговор за командата DIR е списък с файлове в директория.
  • STDERR : Стандартната грешка(Standard Error) е мястото, където отиват всички съобщения за грешка, ако има проблем с командата. Например, ако в директорията няма никакви файлове, командата DIR ще изведе „ Файлът(File) не е намерен“ към потока за стандартни грешки .(Standard Error)

Можете да пренасочите изхода към файл в Windows и за двата изходни потока.

Пренасочване на стандартен изход за запис към нов файл(Redirect Standard Output Write to New File)

Има два начина, по които можете да пренасочите стандартния изход на команда към файл. Първият е да изпращате изхода на командата да записвате в нов файл всеки път, когато изпълнявате командата.

За да направите това, отворете командния ред и въведете:

dir test.exe > myoutput.txt

Знакът > казва на конзолата да изведе STDOUT във файла с името, което сте предоставили.

Когато изпълните тази команда(run this command) , ще забележите, че няма никакъв отговор в командния прозорец, освен грешката, че файлът не съществува.

Това е така, защото стандартният изход за командата беше пренасочен към файл, наречен myoutput.txt. Файлът вече съществува в същата директория, където сте изпълнили командата. Стандартният изход за грешка все още се показва както обикновено.

Забележка(Note) : Внимавайте да промените активната директория(change the active directory) за командния ред, преди да стартирате командата. По този начин ще знаете къде се съхраняват изходните файлове.

Можете да видите стандартния изход, който отиде във файла, като напишете “myoutput.txt” в командния прозорец. Това ще отвори текстовия файл в програмата за преглед на текстови файлове по подразбиране. За повечето хора това обикновено е Notepad.exe .

Следващият път, когато изпълните същата команда, предишният изходен файл ще бъде изтрит. Нов изходен файл ще бъде пресъздаден с изхода на последната команда.

Пренасочване на стандартен изход(Standard Output) записва към същия файл(Same File)

Ами ако не искате да презапишете същия файл? Друга възможност е да използвате >> вместо > за пренасочване към изходен файл. В случая на този пример ще напишете:

dir test.exe >> myoutput.txt

Ще видите същия изход (само грешката).

Но в този случай, вместо да презаписва изходния файл, тази команда добавя новия изход към съществуващия изходен файл.

Всеки път, когато стартирате команда и добавите изхода към файл, той ще запише новия стандартен изход в края на съществуващия файл.

Пренасочване на стандартна грешка към файл(Redirect Standard Error To a File)

По същия начин, по който можете да пренасочите стандартните изходни записи към файл, можете също да изведете стандартния поток от грешки във файл.

За да направите това, ще трябва да добавите 2> в края на командата, последвано от изходния файл за грешка, който искате да създадете.

В този пример ще въведете командата: 

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

Това изпраща стандартния изходен поток към myoutput.txt, а стандартния поток за грешки към output.err. Резултатът е, че никакъв изходен поток не се показва в прозореца на конзолата.

Можете обаче да видите съобщенията за грешка, като напишете output.err . Това ще отвори файла в програмата за преглед на текстови файлове по подразбиране.

Както можете да видите, всички съобщения за грешка от командата се извеждат във файла за грешка. Точно(Just) както при стандартния изход, можете да използвате >> вместо това, за да добавите грешката към грешки от предишни команди.

Пренасочване на всички изходни записи към един и същ файл(Redirect All Output Writes to a Same File)

Всички горепосочени подходи водят до множество файлове. Единият файл е за стандартния изходен поток, а другият е за стандартния поток за грешки.

Ако искате да включите и двата изхода към един и същ файл, можете да го направите. За да направите това, просто трябва да пренасочите целия изход към един и същ файл, като използвате следната команда.

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

Ето как работи тази команда:

  • Стандартният изход се насочва към изходния файл, идентифициран с изходен номер 1.
  • Стандартният изход за грешка, идентифициран с номер 2, се пренасочва към изходния файл, идентифициран с номер 1.

Това ще добави изхода за грешка в края на стандартния изход.

Това е полезен начин да видите целия изход за всяка команда в един файл. 

Заглушаване на стандартни изходни потоци или потоци за грешки(Silencing Standard or Error Output Streams)

Можете също да изключите стандартния изход(Standard Output) или стандартната грешка(Standard Error) , като пренасочите изхода към NUL вместо към файл.

Използвайки примера по-горе, ако искате само стандартен изход(Standard Output) и изобщо да няма стандартна грешка(Standard Error) , можете да използвате следната команда:

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

Това ще доведе до същия изходен файл като първия пример по-горе, където сте пренасочили само стандартния изход(Standard Output) , но с тази команда грешката няма да отекне вътре в конзолата. Той също няма да създаде регистрационен файл за грешки.

Това е полезно, ако не ви пука за грешки и не искате те да се превърнат в неудобство.

Можете да изпълнявате някоя от същите изходни команди по-горе от вътре в BAT файл(inside a BAT file) и изходът от този ред ще отиде в изходния файл, който посочите. Това е полезен начин да видите дали някои команди в BAT файл са имали грешки, когато са се опитали да се изпълнят.



About the author

аудиофил инженер и специалист по аудио продукти с повече от 10 години опит. Специализирам се в създаването на качествени музикални високоговорители и слушалки от началото до края. Аз съм експерт в отстраняването на аудио проблеми, както и в проектирането на нови високоговорители и системи за слушалки. Моят опит надхвърля просто правенето на добри продукти; Също така имам страст да помагам на другите да бъдат възможно най-добрите, независимо дали това е чрез образование или общественополезен труд.



Related posts