COMMAND.COM fue el intérprete de línea de comandos predeterminado en MS-DOS y en las primeras versiones de Windows, incluidas Windows 95, Windows 98 y Windows Me. Aunque estos sistemas han sido reemplazados en gran medida por interfaces gráficas y versiones más modernas de Windows, COMMAND.COM jugó un papel fundamental en la evolución de las interfaces de usuario y el funcionamiento de los sistemas operativos en la era temprana de la computación personal.
Función principal de COMMAND.COM
En los sistemas MS-DOS, COMMAND.COM era tanto el intérprete de comandos como la interfaz de usuario predeterminada. A diferencia de los sistemas operativos modernos que ofrecen una interfaz gráfica completa, MS-DOS era puramente basado en texto y el usuario interactuaba con el sistema operativo a través de comandos escritos. Cada vez que se encendía el ordenador, COMMAND.COM era el primer programa en ejecutarse después del proceso de arranque, actuando como el «proceso init» del sistema. Desde ahí, proporcionaba el entorno interactivo para que el usuario ingresara comandos y controlara el sistema.
Modos de operación de COMMAND.COM
COMMAND.COM ofrecía dos modos de operación principales:
- Modo interactivo: Este es el modo en el que la mayoría de los usuarios interactuaba diariamente. En el modo interactivo, el usuario ingresa comandos de manera directa, los cuales son interpretados y ejecutados de inmediato. Por ejemplo, comandos como
dir
para listar los archivos en un directorio, ocopy
para copiar archivos, se ejecutaban instantáneamente cuando se introducían en la línea de comandos. - Modo batch (por lotes): En este modo, COMMAND.COM ejecutaba una serie de comandos previamente escritos en un archivo con la extensión
.bat
(archivo por lotes). Esto permitía a los usuarios automatizar tareas repetitivas. Los archivos por lotes podían contener secuencias de comandos que serían ejecutadas de manera secuencial sin la necesidad de intervención del usuario, facilitando la automatización de procesos rutinarios como copias de seguridad, mantenimiento de discos o configuraciones iniciales del sistema.
Comandos internos
Los comandos internos son aquellos almacenados directamente en el binario de COMMAND.COM. Esto significa que siempre estaban disponibles para su uso, incluso si no había archivos del sistema presentes en el disco. A diferencia de los comandos externos, que eran programas ejecutables almacenados en archivos separados, los comandos internos formaban parte del propio COMMAND.COM y no requerían acceso a discos adicionales para ejecutarse.
Algunos de los comandos internos más utilizados incluyen:
- dir: Muestra una lista de archivos y subdirectorios dentro de un directorio.
- Ejemplo:
dir c:\
lista todos los archivos y carpetas en el directorio raíz de C:.
- Ejemplo:
- copy: Copia archivos de un lugar a otro.
- Ejemplo:
copy file1.txt d:\
copia el archivofile1.txt
a la unidad D:.
- Ejemplo:
- del (o erase): Elimina uno o varios archivos.
- Ejemplo:
del archivo.txt
elimina el archivoarchivo.txt
.
- Ejemplo:
- cd (o chdir): Cambia el directorio actual.
- Ejemplo:
cd c:\carpeta
cambia el directorio actual ac:\carpeta
.
- Ejemplo:
- cls: Limpia la pantalla.
- Ejemplo:
cls
borra todos los comandos y resultados anteriores en la pantalla.
- Ejemplo:
- md (o mkdir): Crea un nuevo directorio.
- Ejemplo:
md nueva_carpeta
crea una carpeta llamadanueva_carpeta
.
- Ejemplo:
- rd (o rmdir): Elimina un directorio vacío.
- Ejemplo:
rd carpeta_vacía
elimina el directoriocarpeta_vacía
si está vacío.
- Ejemplo:
- ren (o rename): Cambia el nombre de uno o varios archivos.
- Ejemplo:
ren archivo1.txt archivo2.txt
cambia el nombre dearchivo1.txt
aarchivo2.txt
.
- Ejemplo:
- type: Muestra el contenido de un archivo de texto.
- Ejemplo:
type archivo.txt
muestra el contenido dearchivo.txt
.
- Ejemplo:
- date: Muestra o cambia la fecha del sistema.
- Ejemplo:
date
muestra la fecha actual del sistema y permite cambiarla si se desea.
- Ejemplo:
- time: Muestra o cambia la hora del sistema.
- Ejemplo:
time
muestra la hora actual y permite modificarla.
- Ejemplo:
- ver: Muestra la versión del sistema operativo.
- Ejemplo:
ver
muestra la versión de MS-DOS o Windows en uso.
- Ejemplo:
- path: Muestra o establece rutas de búsqueda para los comandos ejecutables.
- Ejemplo:
path c:\carpeta
agregac:\carpeta
a las rutas de búsqueda de comandos.
- Ejemplo:
- pause: Pausa la ejecución de un archivo por lotes hasta que el usuario presione una tecla.
- Ejemplo:
pause
muestra el mensaje «Presione una tecla para continuar…».
- Ejemplo:
- echo: Muestra mensajes o habilita/deshabilita la visualización de comandos en archivos por lotes.
- Ejemplo:
echo Hola, mundo
muestra el mensaje «Hola, mundo».
- Ejemplo:
- set: Establece o muestra las variables de entorno.
- Ejemplo:
set nombre=Juan
crea una variable de entorno llamadanombre
con el valorJuan
.
- Ejemplo:
- exit: Cierra la sesión de COMMAND.COM o sale de un archivo por lotes.
- Ejemplo:
exit
cierra la ventana de DOS o termina la sesión actual.
- Ejemplo:
- prompt: Cambia el símbolo del sistema.
- Ejemplo:
prompt $p$g
cambia el símbolo del sistema para mostrar la ruta de directorio actual seguido del carácter>
.
- Ejemplo:
- vol: Muestra la etiqueta y el número de serie de un disco.
- Ejemplo:
vol c:
muestra la etiqueta de volumen y número de serie del disco C:.
- Ejemplo:
- chkdsk: Verifica un disco y muestra un informe de su estado.
- Ejemplo:
chkdsk c:
verifica el estado del disco C:.
- Ejemplo:
- attrib: Muestra o cambia los atributos de un archivo (solo lectura, oculto, archivo de sistema, etc.).
- Ejemplo:
attrib +r archivo.txt
establece el atributo de solo lectura paraarchivo.txt
.
- Ejemplo:
- break: Controla la comprobación de la combinación de teclas Ctrl+C.
- Ejemplo:
break on
activa la comprobación de interrupciones por Ctrl+C.
- Ejemplo:
- fcbs: Establece el número de File Control Blocks (FCBs) permitidos en la memoria.
- Ejemplo:
fcbs=4
establece que se pueden utilizar 4 FCBS en memoria.
- Ejemplo:
- if: Ejecuta comandos condicionales en un archivo por lotes.
- Ejemplo:
if exist archivo.txt echo El archivo existe
muestra un mensaje siarchivo.txt
existe.
- Ejemplo:
- goto: Transfiere el control a una etiqueta definida en un archivo por lotes.
- Ejemplo:
goto etiqueta
transfiere la ejecución a la línea que contiene:etiqueta
.
- Ejemplo:
- for: Ejecuta un comando de manera repetitiva para un conjunto de archivos.
- Ejemplo:
for %f in (*.txt) do type %f
muestra el contenido de todos los archivos.txt
en el directorio actual.
- Ejemplo:
- shift: Cambia la posición de los parámetros reemplazables en un archivo por lotes.
- Ejemplo:
shift
mueve los parámetros hacia la izquierda en un archivo por lotes, útil en combinación con scripts complejos.
- Ejemplo:
- call: Llama a otro archivo por lotes desde dentro de uno ya en ejecución.
- Ejemplo:
call otro_archivo.bat
ejecuta el archivootro_archivo.bat
.
- Ejemplo:
- subst: Asigna una letra de unidad a una ruta de directorio.
- Ejemplo:
subst z: c:\carpeta
asigna la letra de unidadZ:
al directorioc:\carpeta
.
- Ejemplo:
- mem: Muestra información sobre el uso de la memoria del sistema.
- Ejemplo:
mem
muestra la cantidad de memoria libre, usada y total del sistema.
- Ejemplo:
Estos son solo algunos de los comandos más importantes en COMMAND.COM. Muchos de ellos fueron fundamentales en los entornos de MS-DOS y primeras versiones de Windows para realizar tareas administrativas, de gestión de archivos y automatización mediante scripts por lotes.
Debido a que estos comandos eran parte de COMMAND.COM, siempre estaban disponibles para el usuario desde el inicio, y se ejecutaban directamente desde el intérprete sin necesidad de buscar en el sistema archivos adicionales.
Comandos externos y su relación con COMMAND.COM
Mientras que los comandos internos estaban integrados en el intérprete, los comandos externos eran ejecutables almacenados como archivos separados en el disco duro. Estos programas ofrecían funcionalidades más avanzadas y específicas que las proporcionadas por los comandos internos. Por ejemplo, comandos como format
(para formatear discos) o xcopy
(para copiar archivos y directorios de manera recursiva) eran comandos externos que requerían la presencia de sus respectivos archivos en el sistema.
COMMAND.COM era responsable de buscar y ejecutar estos comandos externos cuando el usuario los introducía. Si el archivo correspondiente al comando externo estaba en el sistema y se encontraba en el «path» (ruta de búsqueda), el intérprete lo ejecutaba como cualquier otro comando. De lo contrario, se devolvía un error indicando que el comando no era reconocido.
Limitaciones y legado de COMMAND.COM
COMMAND.COM, aunque esencial en su época, tenía varias limitaciones en comparación con los shells modernos. Por ejemplo, su capacidad para gestionar nombres de archivos largos era limitada, y solo permitía nombres de archivos en el formato 8.3 (ocho caracteres para el nombre y tres para la extensión). Además, no ofrecía muchas de las características avanzadas que se pueden encontrar en shells más modernos, como Bash en Unix y Linux, o PowerShell en versiones más recientes de Windows.
Sin embargo, su legado es indiscutible. COMMAND.COM sentó las bases para el desarrollo de intérpretes de comandos más avanzados y fue una herramienta fundamental para una generación de usuarios y desarrolladores. A pesar de la transición hacia interfaces gráficas y shells más potentes, muchos de los conceptos introducidos por COMMAND.COM, como los archivos por lotes y la estructura básica de comandos, siguen siendo relevantes hoy en día.
Conclusión
COMMAND.COM fue mucho más que un simple intérprete de comandos en la era de MS-DOS y las primeras versiones de Windows. Como la primera interfaz de usuario que muchos usuarios de computadoras personales conocieron, desempeñó un papel fundamental en la forma en que los usuarios interactuaban con sus sistemas. Aunque ha sido reemplazado por tecnologías más avanzadas, su impacto sigue siendo evidente en la computación moderna, y sigue siendo una parte importante de la historia del desarrollo de sistemas operativos.