Перенаправление вывода из командной строки Windows в текстовый файл

Один из самых полезных способов регистрации и устранения неполадок в поведении команд или пакетных заданий, запускаемых в Windows , — это перенаправление вывода в файл.

Однако есть несколько способов перенаправить запись из командной строки в файл. Выбранный вами вариант зависит от того, как вы хотите просмотреть вывод своей команды.

Как работает вывод командной строки Windows(How Windows Command Prompt Output Works)

Когда вы вводите команду в консоли Windows ( командная строка(command prompt) ), вывод этой команды направляется в два отдельных потока.

  • STDOUT : Standard 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 лет. Я специализируюсь на USB-контроллерах и кабелях, а также на обновлении BIOS и поддержке ACPI. В свободное время я также люблю вести блог на различные темы, связанные с технологиями и инженерией.



Related posts