Una de las utilidades más potentes tanto de la línea de comandos como de PowerShell es la capacidad para redirigir flujos de entrada y salida de datos y la posibilidad de concatenar estos mediante tuberías. En el post de hoy vamos a explicar su funcionamiento.
Empecemos por unos ejemplos muy básicos:
DATE /T > file.txt
Este comando redirige la salida del comando DATE /T (la fecha actual) al fichero file.txt sobrescribiéndolo en el caso de que ya exista.
Otra opción es que en vez de sobrescribir el fichero la salida se añada a un fichero ya existente, en este caso usaremos el siguiente comando:
DATE /T >> file.txt
Al igual que es posible especificarle a un comando cuál será su salida también es posible especificarle cuál va a ser su entrada, como en el siguiente caso:
SORT < file.txt
Este comando ordena las distintas líneas que se encuentre en el fichero file.txt, el resultado lo muestra en la salida. Por ejemplo podemos ordenar un fichero con direcciones email.


Y ya puestos, sería útil que una vez ordenada la lista guarde el resultado en otro fichero. Para ello se usaría:
SORT < mail.txt > mail_sorted.txt
Otra redirección de salida que no hemos tratado aun, es la salida de error. Un comando en su ejecución puede devolver distintos mensajes de error. Es posible distinguir entre la salida estándar y la salida de error. Para ello precedemos el comando de redirección de salida ‘>’ de los números 1 y 2. En los anteriores casos cuando no especificamos un número implícitamente usa la salida 1, la estándar. Así son equivalentes estos dos comandos:
DATE /T > file.txt
DATE /T 1> file.txt
Y ahora un ejemplo con la salida de error, la 2:
dir X:\Carpeta 1> listado.txt 2>error.txt
Este comando guarda el listado del directorio X:\Carpeta en el fichero listado.txt y si ocurriera algún error lo almacena en el fichero error.txt. En mi caso, como no existe la carpeta X:\Carpeta, se da un error que queda guardado en su correspondiente fichero:

En este punto me gustaría explicar un comando que usaremos en adelante, FINDSTR. Este comando permite realizar búsquedas sobre una lista de cadenas. Por ejemplo usando el fichero con direcciones email que hemos utilizado anteriormente es posible buscar todas las direcciones de correo que finalicen (/E) con el texto “hotmail.com”.
FINDSTR /E "hotmail.com" mail.txt

Se me ocurre una operación muy útil que se podría realizar con todo lo aprendido. Dada una lista de correos filtrarla para quedarnos con aquellos que pertenezcan a Hotmail y ordenar el resultado.
FINDSTR /E "hotmail.com" mail.txt > mail_filter.txt
SORT < mail_filter.txt > mail_sorted.txt
Estos dos comandos realizan su cometido, pero sería posible juntarlos ahorrándonos el uso del fichero intermedio si se hace uso de las tuberías. Una tubería, representada por el carácter ‘|’, permite redirigir la salida del comando sitiado a su izquierda a la entrada del comando situado a su derecha. Así los dos anteriores comandos se juntarían en el siguiente:
FINDSTR /E "hotmail.com" mail.txt | SORT > mail_sorted.txt
La tubería hace que la salida del comando FINDSTR sea la entrada del comando SORT.
La combinación de todo esto hace que podamos encontrarnos comandos más o menos complicados pero si se tiene claro lo que hace cada redirección o tubería no habrá problema para entender su funcionamiento.
Me gustaría destacar que la misma acción es posible realizarla con distintos comandos. Estos tres comandos realizan la misma acción:
FINDSTR /E "hotmail.com" mail.txt
FINDSTR /E "hotmail.com" < mail.txt
TYPE mail.txt | FINDSTR /E "hotmail.com"
Espero que este artículo os haya servido de utilidad para entender las redirecciones y las tuberias.
Un saludo!
Enviado
ene 04 2010, 01:24
por
Julian Blazquez