Introduction to Redirection and Pipes
Every command run under cmd.exe has three standard streams: stdin (input, stream 0), stdout (normal output, stream 1), and stderr (error output, stream 2). Batch scripting exposes control over these streams through redirection operators (>, >>, <) that connect a stream to a file, and the pipe operator (|) that connects one command's stdout directly to another command's stdin, letting you chain simple commands into more powerful data-processing pipelines without writing intermediate files by hand.
Cricket analogy: Separating the main scoreboard feed from the commentary audio feed, each going to its own broadcast channel, mirrors how stdout and stderr are two distinct streams that can be routed independently.
Output Redirection Operators
> redirects stdout to a file, creating it or overwriting it if it already exists, while >> appends stdout to the end of an existing file. Because stdout and stderr are numbered streams 1 and 2, you write 2> errors.txt to send only error messages to a file, and 2>&1 duplicates one stream's destination onto another, so command > all.txt 2>&1 sends both normal output and error output into the same file, all.txt; note that the order matters, since 2>&1 must come after the stdout redirection to work as expected.
Cricket analogy: Sending the highlights reel to one archive and the list of controversial umpiring decisions to a separate incident log mirrors > for stdout and 2> for stderr going to different files.
@echo off
REM Send normal output to one file, errors to another
SOME_COMMAND.exe > output.txt 2> errors.txt
REM Combine both streams into a single log file
SOME_COMMAND.exe > combined.log 2>&1
REM Silently discard both streams (common for cleanup commands)
DEL C:\Temp\*.tmp >nul 2>&1Input Redirection
The < operator feeds a file's contents into a command's stdin instead of the keyboard, so SORT < names.txt reads names.txt as if it had been typed interactively and prints the sorted result. This is less commonly used than output redirection in Batch because most built-in commands take a filename argument directly (e.g. TYPE names.txt), but it becomes essential for commands like SORT or MORE that expect to read from stdin, and it's the mechanism that underlies SET /P variable=<file.txt> reading a line from a file.
Cricket analogy: Feeding a pre-recorded list of bowling figures into an analysis tool instead of typing them in live mirrors < feeding a file's contents into a command's stdin.
Piping Between Commands
The | operator connects the stdout of the command on its left directly to the stdin of the command on its right, without an intermediate file, so DIR /B | FINDSTR ".txt" lists the current folder and filters that listing down to only lines containing '.txt', and TYPE access.log | FIND /C "ERROR" counts how many lines in the log contain the word ERROR. Multiple pipes can be chained together, such as DIR /B /S | FINDSTR /I "report" | SORT, which lists files recursively, filters case-insensitively for those containing 'report', and then sorts the results.
Cricket analogy: Passing the raw ball-by-ball feed straight into a filter that only shows boundaries, then into a counter that tallies them, without writing anything to paper in between, mirrors chaining commands with |.
Piped commands in cmd.exe run in separate processes, which means variables set with SET inside a FOR /F loop that is itself piped, or inside the right-hand side of a pipe, may not be visible after the pipeline finishes; this is a common source of confusion when combining pipes with variable assignment, and often requires restructuring the logic or using a temporary file instead of a pipe when the result must be used later in the same script.
The NUL Device and Discarding Output
NUL is a special device name that discards anything written to it, similar to /dev/null on Unix systems, so redirecting a command's output to it silences that output entirely. The common pattern >nul 2>&1 appended to a command suppresses both its normal output and any error messages, which is frequently used when a script only cares about a command's success or failure (via %ERRORLEVEL%) and not the text it prints, such as checking whether a file exists with IF EXIST or testing network connectivity with PING -n 1 host >nul 2>&1.
Cricket analogy: Muting the stadium PA announcer entirely while still watching the scoreboard update mirrors >nul discarding a command's printed output while still checking its exit result.
- cmd.exe exposes three streams: stdin (0), stdout (1), and stderr (2), each independently redirectable.
- > creates/overwrites a file with stdout; >> appends; 2> targets stderr specifically.
- 2>&1 merges stderr into stdout's destination and must appear after the stdout redirection to work correctly.
- < feeds a file's contents into a command's stdin, underlying patterns like SET /P variable=<file.txt>.
- | connects one command's stdout directly to the next command's stdin, chaining commands without intermediate files.
- Piped commands run in separate processes, so variables set inside a pipeline may not persist afterward.
- NUL discards output entirely, and >nul 2>&1 is the standard pattern for silencing a command while still checking %ERRORLEVEL%.
Practice what you learned
1. Which stream number does stderr correspond to in cmd.exe redirection syntax?
2. What does the command SOME_COMMAND.exe > combined.log 2>&1 do?
3. What does the | (pipe) operator do between two commands?
4. Why might a variable set inside a piped FOR /F loop not be usable later in the same script?
5. What is the purpose of appending >nul 2>&1 to a command?
Was this page helpful?
You May Also Like
Reading and Writing Text Files
Learn how Batch scripts write to files with redirection and read them back using FOR /F, SET /P, and FINDSTR.
Robocopy Basics
Learn Robocopy's retry logic, mirroring behavior, and key switches for reliable file synchronization and backup scripts.
Copy, Move, and Delete Commands
Master COPY, XCOPY, MOVE, REN, and DEL to duplicate, relocate, and remove files and folders safely in Batch scripts.
Related Reading
Related Study Notes in Microsoft Technologies
Browse all study notesWindows 10 / UWP Development Study Notes
.NET · 30 topics
Microsoft TechnologiesMFC (Microsoft Foundation Classes) Study Notes
C++ · 30 topics
Microsoft TechnologiesSilverlight Study Notes
.NET · 30 topics
Microsoft TechnologiesXAML Study Notes
.NET · 30 topics
Microsoft TechnologiesWPF (Windows Presentation Foundation) Study Notes
.NET · 30 topics
Microsoft TechnologiesMVVM Design Pattern Study Notes
.NET · 30 topics