To redirect the output of a command to a file, type the command, specify the > or the >> operator, and then provide the path to a file you want to the output redirected to. For example, the ls command lists the files and folders in the current directory.
The regular output is sent to Standard Out (STDOUT) and the error messages are sent to Standard Error (STDERR). When you redirect console output using the > symbol, you are only redirecting STDOUT. In order to redirect STDERR, you have to specify 2> for the redirection symbol.
Redirecting output to Multiple files and screen: If you want to redirect the screen output to multiple files, the only thing you have to do is add the file names at the end of the tee command.
To redirect the output of a command to a text file instead of printing it to the screen in the command window, we simply need to execute the command and append it with the “>” angle bracket symbol—called, appropriately enough, a redirection.
To expand on davor's answer, you can use PowerShell like this:
powershell "dir | tee test.txt"
If you're trying to redirect the output of an exe in the current directory, you need to use .\
on the filename, eg:
powershell ".\something.exe | tee test.txt"
I was able to find a solution/workaround of redirecting output to a file and then to the console:
dir > a.txt | type a.txt
where dir is the command which output needs to be redirected, a.txt a file where to store output.
There's a Win32 port of the Unix tee
command, that does exactly that. See http://unxutils.sourceforge.net/ or http://getgnuwin32.sourceforge.net/
Check this out: wintee
No need for cygwin.
I did encounter and report some issues though.
Also you might check unxutils because it contains tee (and no need for cygwin), but beware that output EOL's are UNIX-like here.
Last, but not least, is if you have PowerShell, you could try Tee-Object. Type get-help tee-object
in PowerShell console for more info.
@tori3852
I found that
dir > a.txt | type a.txt
didn't work (first few lines of dir listing only - suspect some sort of process forking and the second part, the 'type' command terminated before the dire listing had completed? ), so instead I used:
dir > z.txt && type z.txt
which did - sequential commands, one completes before the second starts.
Unfortunately there is no such thing.
Windows console applications only have a single output handle. (Well, there are two STDOUT
, STDERR
but it doesn't matter here) The >
redirects the output normally written to the console handle to a file handle.
If you want to have some kind of multiplexing you have to use an external application which you can divert the output to. This application then can write to a file and to the console again.
A simple C# console application would do the trick:
using System;
using System.Collections.Generic;
using System.IO;
namespace CopyToFiles
{
class Program
{
static void Main(string[] args)
{
var buffer = new char[100];
var outputs = new List<TextWriter>();
foreach (var file in args)
outputs.Add(new StreamWriter(file));
outputs.Add(Console.Out);
int bytesRead;
do
{
bytesRead = Console.In.ReadBlock(buffer, 0, buffer.Length);
outputs.ForEach(o => o.Write(buffer, 0, bytesRead));
} while (bytesRead == buffer.Length);
outputs.ForEach(o => o.Close());
}
}
}
To use this you just pipe the source command into the program and provide the path of any files you want to duplicate the output to. For example:
dir | CopyToFiles files1.txt files2.txt
Will display the results of dir as well as store the results in both files1.txt and files2.txt.
Note that there isn't much (anything!) in the way of error handling above, and supporting multiple files may not actually be required.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With