===== Piping =====
You can create a "pipe" to send the standard output of one command to the standard input of another command:
|''command1 | command2Send'' |the standard output of command1 to the standard input of command2 |
|''command1 |& command2Send'' |the standard output and standard error of command1 to the standard input of command2 |
For example, to take the output of the **SET** command (which displays a list of your environment variables and their values) and pipe it to the **SORT** utility to generate a sorted list, you would use the command:
[c:\] set | sort
To do the same thing and then pipe the sorted list to the internal **[[LIST]]** command for full-screen viewing:
[c:\] set | sort | list
The **[[TEE]]** and **[[Y]]** commands are "pipe fittings" which add more flexibility to pipes.
Like redirection, pipes are fully nestable. For example, you can invoke a batch file and send all of its output to another command with a pipe. A pipe on a command within the batch file will take effect for that command only; when the command is completed, output will revert to the pipe in use for the batch file as a whole. You may also have 2 or more pipes operating simultaneously if, for example, you have the pipes running in different windows.
**CMD.EXE** implements pipes by starting a new process for the receiving program instead of using temporary files. The sending and receiving programs run simultaneously; the sending program writes to the pipe and the receiving program reads from the pipe. When the receiving program finishes reading and processing the piped data, it is ends automatically.
When you use pipes with **CMD.EXE** make sure you think about any possible consequences that can occur from using a separate process to run the receiving program.