Introducción a la Línea de comandos en Windows

Versión 1.0 (2014-01-11).

Comentarios, erratas y propuestas a alcortes@it.uc3m.es.

Introducción

La línea de comandos es una herramienta sencilla y potente que se puede aprender a utilizar en pocos minutos.

Esta guía está pensada para enseñarte lo básico y necesario, en el contexto de una asignatura de introducción a la programación.

Está inspirada en Windows Command Prompt in 15 Minutes.

¿Qué es la Línea de comandos?

Es un programa que te permite comunicarte con tu sistema operativo mediante una interfaz textual, que utiliza un lenguaje de alto nivel, cercano al lenguaje natural.

Hoy en día la mayoría de usuarios interaccionan con Windows mediante una interfaz gráfica (GUI, Graphical User Interface). Sin embargo, a nivel profesional y para determinadas tareas, una interfaz textual (CLI, Command Line Interface) resulta mucho más eficiente, de ahí la importancia de aprender a utilizar la línea de comandos.

Otros nombres por los que se conoce a la Línea de comandos son: el prompt, la shell o command line.

¿Cómo arranco la Línea de comandos?

Para arrancar la Línea de comandos en Windows has de ejecutar el programa cmd.

Una manera rápida de hacer esto es desde el menú Iniciar, rellena el campo de texto "Buscar programas y archivos" con el nombre del programa de la línea de comandos: cmd y pulsa la tecla "Entrar".

Aparecerá la ventana de la línea de comandos, con un aspecto similar a este:

La Línea de comandos está lista para trabajar y ejecutar cualquier orden que tú le des. Estas "órdenes" se denominan comandos.

¿Cómo ejecuto un comando?

Para ejecutar un comando simplemente escribe su nombre y pulsa la tecla "Entrar".

Por ejemplo, el comando para cerrar la línea de comandos se llama EXIT. Prueba a cerrar la línea de comandos usando este sencillo comando.

Algunos comandos admiten argumentos, cadenas de texto que modifican o especializan el funcionamiento estándar del comando. Por ejemplo el comando ECHO imprime por pantalla los argumentos que le pases:

C:\Users\Alberto>echo Hola Mundo!
Hola Mundo!

Para separar y distinguir los comandos de sus argumentos se utiliza uno (o varios) espacios.

A nivel de programación, la Línea de comandos es un programa muy sencillo, consiste en un simple bucle infinito:

  1. Espera a que el usuario escriba algo y pulse "Entrar"
  2. Interpreta lo escrito como un comando y lo ejecuta
  3. Muestra el "resultado" por pantalla
  4. Repite desde 1.

El directorio de trabajo

El directorio de trabajo es un concepto fundamental en la Línea de comandos y representa el "lugar" del sistema de ficheros donde estaremos trabajando.

Cuando creamos o accedemos a ficheros desde la Línea de comandos, estos se crearán, por defecto, en nuestro directorio de trabajo.

La Línea de comandos nos recuerda cual es nuestro directorio de trabajo en todo momento mostrándonos su ruta por pantalla cada vez que espera a que le introduzcamos un nuevo comando. En los ejemplos anteriores, el directorio de trabajo era C:\Users\Alberto.

El comando CD (change directory) sirve para cambiar el directorio de trabajo. Windows mantiene un directorio de trabajo diferente para cada unidad y podemos movernos de unidad simplemente introduciendo su nombre como si fuera un comando.

En el siguiente ejemplo vamos a copiar un fichero java desde el directorio "practicas" en nuestro "Escritorio" (C:\Users\Alberto\Desktop\practicas) a un pincho USB montado en la unidad E:. Para ello utilizaremos los comandos:

C:\Users\Alberto>cd Desktop\practicas

C:\Users\Alberto\Desktop\practicas>dir
 Volume in drive C has no label.
 Volume Serial Number is A276-0A43

 Directory of C:\Users\Alberto\Desktop\practicas

2014-01-12  10:50    <DIR>          .
2014-01-12  10:50    <DIR>          ..
2014-01-12  10:50               119 HelloWorld.java
               1 File(s)            119 bytes
               2 Dir(s)  852.358.754.304 bytes free

C:\Users\Alberto\Desktop\practicas>copy HelloWorld.java E:\backup
        1 file(s) copied.

C:\Users\Alberto\Desktop\practicas>cd E:\backup

C:\Users\Alberto\Desktop\practicas>E:

E:\backup>dir
 Volume in drive E has no label.
 Volume Serial Number is 82F9-0FE4

 Directory of E:\backup

2014-01-12  10:52    <DIR>          .
2014-01-12  10:52    <DIR>          ..
2014-01-12  10:50               119 HelloWorld.java
               1 File(s)            119 bytes
               2 Dir(s)   2.049.359.872 bytes free

La Línea de comandos admite algunas abreviaturas prácticas para referirnos a directorios importantes:

En el siguiente ejemplo vamos a mover el fichero java que copiamos antes, del directorio E:\backup al directorio (E:\backup\practicas) utilizando el comando MOVE.

E:\backup> cd practicas

E:\backup\practicas>move ../HelloWorld.java .
        1 file(s) moved.

Trabajando con ficheros

En los ejemplos anteriores ya hemos visto cómo listar los ficheros de un directorio, cómo copiar ficheros y cómo moverlos. A continuación se presenta una lista un poco más extensa de comandos útiles para trabajar con ficheros:

La Línea de comandos admite algunos caracteres comodín, que sirven para referirse a varios ficheros al mismo tiempo. Por ejemplo el carácter "*" sirve para referirse a todos los ficheros de un directorio.

Por ejemplo, para copiar todos nuestros ficheros de prácticas a nuestro pincho USB, podemos utilizar el siguiente comando:

C:\Users\Alberto\Desktop\practicas>dir
 Volume in drive C has no label.
 Volume Serial Number is A276-0A43

 Directory of C:\Users\Alberto\Desktop\practicas

2014-01-12  11:18    <DIR>          .
2014-01-12  11:18    <DIR>          ..
2014-01-12  11:18               426 HelloWorld.class
2014-01-12  10:50               119 HelloWorld.java
               2 File(s)            545 bytes
               2 Dir(s)  852.354.453.504 bytes free

C:\Users\Alberto\Desktop\practicas>copy * E:\backup
HelloWorld.class
HelloWorld.java
        2 file(s) copied.

Trabajando con Java

Para trabajar con Java, a nivel básico, es importante conocer los siguientes comandos:

En el siguiente ejemplo vamos a compilar y ejecutar un sencillo programa Java desde la Línea de comandos:

C:\Users\Alberto\Desktop\practicas>javac HelloWorld.java

C:\Users\Alberto\Desktop\practicas>java HelloWorld
Hello World!

Redirección de entrada/salida

Los comandos diseñados para funcionar con la Línea de comandos tienen por defecto 3 interfaces de comunicación con el mundo exterior:

  1. entrada estándar: Es un flujo de datos del que los programas pueden leer para obtener sus datos de entrada. Por defecto está asociado al teclado. Por ejemplo, la propia Línea de comandos averigua que comandos quiere ejecutar el usuario mirando su entrada estándar, es decir, las teclas que el usuario pulsa.
  2. salida estándar: Es un flujo de datos por el que los programas pueden mostrar sus resultados. Por defecto está asociado al texto que muestra la Línea de comandos. Cuando nuestro programa Java HelloWorld utiliza System.out.println("Hello World!") le está pidiendo a la salida estándar que muestre ese texto por la pantalla.
  3. salida de error estándar: Similar a la salida estándar pero para mostrar mensajes de error en vez de resultados.

Estos flujos puede redireccionarse, por ejemplo para guardar el resultado de un comando en un fichero en vez de mostrarlo por pantalla, o para redireccionar la salida de un comando a la entrada de otro comando.

Estas operaciones de redirección se realizan utilizando los operadores "<", ">" y "|" (para redireccionar la entrada estándar, la salida estándar y para enlazar salida y entrada respectivamente).

Por ejemplo, para guardar la salida de nuestro programa HelloWorld en un fichero llamado salida.txt y comprobar su contenido después, podemos ejecutar la siguiente secuencia de comandos:

C:\Users\Alberto\Desktop\practicas>java HelloWorld > salida.txt

C:\Users\Alberto\Desktop\practicas>more salida.txt
Hello World!

Si tenemos un programa Java que cuenta palabras de su entrada estándar, podemos contar las palabras de nuestro fichero de la siguiente manera:

C:\Users\Alberto\Desktop\practicas>java CountWords < salida.txt
2

También podemos contar las palabras directamente de la salida original de nuestro programa HelloWorld, enlazando las salidas y entradas de ambos comandos:

C:\Users\Alberto\Desktop\practicas>java HelloWorld | java CountWords
2

Limitaciones de la Línea de comandos

En muchos sistemas operativos, la Línea de comandos es un programa extremadamente potente y versátil, cuyo manejo profesional es fundamental para un desempeño eficiente de nuestro trabajo.

Sin embargo, la Línea de comandos de Windows es un caso especial, ya que sus funcionalidades son muy limitadas, su lenguaje es inconsistente y su documentación es escasa y confusa.

Aun así, aprender a usarla es muy beneficioso, ya que no solo nos ahorrará tiempo cuando trabajemos en Windows, si no que nos familiarizará con una herramienta que necesitaremos en el futuro, en otros entornos más profesionales.

Ejercicios para el lector

  1. Averigua cómo borrar todos los ficheros de un directorio que empiecen por el patrón HelloWo (por ejemplo para borrar con un solo comando los ficheros HelloWorld.java y HelloWorld.class de un directorio sin borrar otros ficheros importantes).
  2. Averigua como copiar y pegar textos largos desde y hacia la Línea de comandos (por ejemplo para copiar un mensaje de error del compilador Java desde la Línea de comandos en un navegador Web y así poder buscar lo que significa).