100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace
Batch

Batch File Redirection and Pipes

Understand stdin, stdout, and stderr redirection, piping commands together, and silencing output with NUL in Batch scripts.

File OperationsIntermediate11 min readJul 10, 2026
Analogies

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.

batch
@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>&1

Input 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

Was this page helpful?

Topics covered

#Batch#WindowsBatchScriptingStudyNotes#MicrosoftTechnologies#BatchFileRedirectionAndPipes#File#Redirection#Pipes#Output#StudyNotes#SkillVeris