Redirecciones y tuberías en Windows por Francisco Oca

Windows Técnico

Sindicación

Proximos HOLs

Loading...

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.

clip_image002

clip_image004

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:

clip_image006

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

clip_image008

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

Comentarios

copycat escrito re: Redirecciones y tuberías en Windows por Francisco Oca
en 01-05-2010 11:28

pues sí, buena explicacion. Gracias

Añadir un comentario

(requerido)  
(opcional)
(requerido)  
Recordarme
If you can't read this number refresh your screen
Enter the numbers above: