Archivos .cmd vs .bat: guía completa para entenderlos y usarlos

Última actualización: diciembre 15, 2025
Autor: Isaac
  • Los archivos .bat y .cmd son scripts de texto que automatizan comandos de CMD en Windows, con origen y matices distintos pero uso muy parecido.
  • Su potencia se basa en combinar comandos clásicos (ECHO, DIR, COPY...), variables, parámetros y estructuras de control como IF, FOR o GOTO.
  • Permiten automatizar copias de seguridad, mantenimiento del sistema, gestión de ficheros y ejecución de herramientas externas de forma controlada.
  • Un uso responsable exige documentar bien los scripts, validar rutas y extremar la precaución con archivos .bat o .cmd procedentes de fuentes ajenas.

Comparativa archivos cmd y bat en Windows

Si trabajas en Windows tarde o temprano te vas a cruzar con los archivos .bat y .cmd. A simple vista parecen lo mismo: haces doble clic y se abre la típica ventana negra del símbolo del sistema. Pero por debajo hay matices, compatibilidades y pequeños detalles que conviene conocer si quieres automatizar tareas sin sorpresas.

En este artículo vamos a repasar con detalle qué son los archivos .bat y .cmd, cómo funcionan, qué comandos puedes usar dentro de ellos y en qué se diferencian realmente. También verás un buen repaso a las órdenes clásicas de MS‑DOS / CMD, ejemplos prácticos y trucos para escribir scripts más limpios y potentes sin volverte loco.

Qué son los archivos .bat y .cmd y para qué sirven

Archivos batch en Windows

Un archivo con extensión .bat o .cmd es básicamente un fichero de texto plano que contiene una lista de comandos de consola que se ejecutan en orden, uno detrás de otro, sin que el usuario tenga que ir tecleándolos a mano. Es lo que toda la vida se ha llamado un archivo de procesamiento por lotes o batch file.

En los viejos tiempos de MS‑DOS el estándar eran los .BAT ejecutados por command.com. Con la llegada de Windows NT y posteriores aparece CMD.EXE, el intérprete moderno de comandos, que sigue aceptando .BAT pero introduce también la extensión .CMD para scripts pensados específicamente para este entorno más nuevo.

Ambos tipos de archivos permiten automatizar tareas repetitivas: copiar y mover ficheros, lanzar programas externos, hacer copias de seguridad, limpiar temporales, ejecutar comprobaciones del sistema o incluso montar pequeños menús interactivos. Su utilidad es muy similar a lo que sería un script de PowerShell o de Bash en Linux, solo que usando la sintaxis del intérprete clásico de Windows.

La gran ventaja es que puedes crear un archivo .bat o .cmd con un simple Bloc de notas, guardarlo, y tener siempre a mano una secuencia lista para ejecutar con un doble clic o desde otra herramienta, sin tener que recordar todos los comandos de memoria cada vez.

La gran ventaja es que puedes crear un archivo .bat o .cmd con un simple Bloc de notas, guardarlo, y tener siempre a mano una secuencia lista para ejecutar con un doble clic o desde otra herramienta, sin tener que recordar todos los comandos de memoria cada vez.

Diferencias prácticas entre archivos .cmd y .bat

Diferencias cmd y bat

A nivel de usuario, si haces doble clic en un .bat o .cmd, verás casi lo mismo: se abre una ventana de CMD y empieza a ejecutarse el contenido. Sin embargo, hay varios matices que ayudan a decidir cuándo conviene usar una extensión u otra.

La primera diferencia viene heredada del pasado: los archivos .BAT fueron diseñados para command.com, mientras que los .CMD se introdujeron con CMD.EXE. Esto implica que algunas particularidades antiguas de MS‑DOS podían funcionar de forma ligeramente distinta en cada caso, sobre todo en sistemas muy viejos o al mezclar comandos específicos de cada intérprete.

Hoy en Windows modernos, tanto .bat como .cmd se ejecutan usando CMD.EXE, pero la extensión sigue siendo una pista de intención: lo habitual es reservar .BAT para scripts sencillos y muy compatibles (por ejemplo, utilidades antiguas o ejemplos básicos), y optar por .CMD para guiones más orientados a entornos Windows NT/11 donde aprovechas comportamientos propios de CMD.

En la práctica, a la hora de escribir comandos como ECHO, IF, FOR, SET o GOTO, no notarás diferencias. Lo que sí cambia es el contexto en el que históricamente se esperaban encontrar y algunas reglas sutiles de prioridad o errorlevel en versiones antiguas de Windows, que hoy apenas afectan al usuario medio.

Como regla sencilla: si estás aprendiendo o quieres un script básico que funcione sin quebraderos de cabeza, puedes usar perfectamente .BAT. Si vas a integrarlo en automatizaciones más avanzadas o entornos corporativos modernos, .CMD es una extensión coherente con el ecosistema actual de Windows.

Cómo interpreta Windows un comando o archivo batch

Orden de búsqueda de comandos en Windows

Cuando en el símbolo del sistema escribes un nombre (por ejemplo, backup) sin extensión, Windows sigue un orden muy claro para decidir qué ejecutar. Este proceso también afecta a cómo se lanzan los archivos .bat y .cmd:

  1. Primero comprueba si se trata de un comando interno integrado en el intérprete (en tiempos de MS‑DOS, los incorporados en command.com; hoy en día, en CMD.EXE).
  2. Si no es comando interno, busca un ejecutable .COM o .EXE con ese nombre en el directorio actual.
  3. Después intenta localizar un archivo .BAT con ese nombre, otra vez empezando por la carpeta donde estás situado.
  4. Si todavía no encuentra nada, recorre los directorios listados en la variable de entorno PATH siguiendo el mismo orden de comprobación.

Por eso es recomendable guardar tus scripts .bat o .cmd en una carpeta concreta (por ejemplo, C:\scripts) y añadirla a la variable PATH. Así podrás invocarlos desde cualquier ruta sin tener que escribir la ubicación completa, algo muy cómodo cuando empiezas a acumular utilidades caseras.

Si añades rutas al PATH solo desde la consola con comandos como SET PATH=…, esos cambios serán temporales y se perderán al cerrar la ventana. Para hacerlo permanente hay que ir a las Propiedades del sistema > Configuración avanzada > Variables de entorno y editar allí la variable PATH de usuario o de sistema.

Comandos básicos para scripts .bat y .cmd

Comandos básicos batch

Los archivos .bat y .cmd se apoyan en un buen conjunto de órdenes clásicas de consola que siguen disponibles en Windows. Son la caja de herramientas con la que construirás casi cualquier script:

  • ECHO: Muestra texto por pantalla. Es la forma estándar de sacar mensajes al usuario, por ejemplo ECHO Copia finalizada. Si escribes solo ECHO. creas una línea en blanco.
  • @ECHO OFF: Normalmente se coloca al principio del archivo para ocultar la visualización de los comandos mientras se ejecutan, de forma que el usuario solo vea los mensajes que tú quieras. Su opuesto es @ECHO ON, que vuelve a mostrar todo lo que se ejecuta.
  • DIR: Enseña el contenido de la carpeta actual o de la ruta que indiques, con archivos y subdirectorios.
  • TYPE: Imprime en la consola el contenido de un archivo de texto, útil para consultar logs o resultados sin abrir un editor.
  • COPY: Copia uno o varios archivos a otra ubicación. Permite combinar comodines y rutas para automatizar copias.
  • REN (o RENAME): Sirve para cambiar el nombre de uno o varios ficheros, muy práctico con comodines.
  • DEL: Elimina ficheros. Hay que usarlo con cuidado porque en muchos casos no habrá marcha atrás directa.
  • MD o MKDIR: Crea un nuevo directorio en la ruta indicada.
  • CD o CHDIR: Cambia el directorio actual, algo básico para moverse dentro del script por distintas rutas.
  • RD o RMDIR: Borra un directorio vacío. Para limpiar carpetas con contenido se usaban órdenes como DELTREE en sistemas antiguos.
  • CLS: Limpia la pantalla del CMD para empezar a mostrar información desde cero.
  • HELP: Muestra ayuda general sobre los comandos disponibles o, si añades un nombre, sobre uno en concreto.
  • SORT: Ordena líneas de texto que reciba, útil combinado con redirecciones y otros comandos.
  • SHUTDOWN: Permite apagar, reiniciar o cerrar sesión en el ordenador con varios parámetros.
  ¿Cómo se determina la capacidad de un proceso?

Todos estos comandos se pueden combinar con redirecciones como > (sobrescribir un archivo de salida) o >> (añadir al final de un fichero existente), y con operadores como & para encadenar varios comandos en una sola línea.

Comentarios, pausa y control de la ejecución

Scripts batch con comentarios

Para que tus scripts sean mantenibles conviene explicar qué hace cada bloque. En los archivos .bat y .cmd dispones de dos formas clásicas de añadir comentarios que el intérprete no ejecuta:

  • REM: Todo lo que vaya detrás en esa línea se trata como comentario. El intérprete pasa por la línea, la reconoce como REM y continúa, aunque llega a leerla.
  • ::: Otra forma habitual es comenzar la línea con dos puntos seguidos, lo que el intérprete considera una etiqueta inválida. Este truco es algo más eficiente porque ni siquiera procesa el resto de la línea como comando.

Cuando quieres detener momentáneamente la ejecución, el comando estrella es PAUSE. Muestra por defecto el clásico mensaje de «Presione una tecla para continuar…» y se queda esperando a que el usuario pulse algo para seguir con el siguiente bloque.

Si quieres pausar sin mostrar nada, puedes redirigir el mensaje de salida con PAUSE > NUL. En ese caso la ejecución se detiene igual, pero el usuario no ve texto, solo la consola aparentemente quieta hasta que toca una tecla. Para escenarios donde conviene una ejecución silenciosa es útil ver cómo ejecutar archivos por lotes de forma silenciosa.

El control de visibilidad de comandos (usando ECHO ON / OFF) más el uso de comentarios y pausas te permite construir scripts mucho más amigables para quien los ejecute, evitando que vean una lluvia de comandos crípticos y guiándoles con mensajes claros.

Variables, SET y parámetros en archivos .bat y .cmd

Una de las claves para que un archivo .bat o .cmd deje de ser un simple listado fijo de órdenes y se convierta en algo flexible es utilizar variables y parámetros que cambien según el contexto o la entrada del usuario.

Dentro de CMD las variables de entorno se gestionan con el comando SET. De forma básica, puedes declarar algo como SET carpeta=C:\Backup y luego usar %carpeta% en otros comandos. Pero hay dos modos especialmente útiles:

  • SET /A: Activa el modo de cálculo aritmético. Permite asignar a una variable el resultado de una operación, por ejemplo SET /A numero=2+2, con lo que la variable %numero% tomará el valor 4. Puedes usar sumas, restas y otras operaciones básicas.
  • SET /P: Sirve para leer datos desde el teclado. Todo lo que haya después del signo igual se mostrará como mensaje, y lo que escriba el usuario se guardará en la variable. Un ejemplo típico sería SET /P nombre=Introduce tu nombre:, con lo que más tarde podrás usar %nombre% dentro del script.

Además de las variables que creas, cada script puede recibir parámetros posicionales al ser invocado. Si tienes un archivo saludo.bat con la línea ECHO Hola %1, y lo ejecutas como saludo.bat Pepe, en pantalla aparecerá el texto Hola Pepe. Aquí %1 es el primer parámetro, y así hasta %9.

El valor %0 hace referencia al propio nombre del script que se está ejecutando, algo útil para mostrar información de ayuda o relanzarlo. Y el símbolo %* representa todos los parámetros pasados, lo que viene bien para reenviarlos a otros comandos sin tener que listarlos uno a uno.

Si necesitas manejar más de nueve parámetros, entra en juego el comando SHIFT, que «corre» los valores de forma que lo que antes era %2 pase a ser %1, lo que era %3 se convierta en %2, y así sucesivamente. De esta manera, puedes ir procesando argumentos por tandas en bucles. Con el modificador SHIFT /n puedes indicar desde qué posición (entre 2 y 9) empieza ese desplazamiento.

Estructuras de control: IF, GOTO, CHOICE y ERRORLEVEL

Para pasar de un listado lineal de comandos a algo parecido a la lógica de un programa necesitas condicionales, saltos y elecciones. CMD ofrece varias herramientas clave que funcionan igual en .bat y .cmd.

  ¿Cuál es el color que menos se ensucia?

La instrucción IF permite ejecutar comandos solo si se cumple una condición concreta. La sintaxis básica incluye varias variantes muy potentes:

  • IF ERRORLEVEL número comando: comprueba el código de salida del comando anterior. Si es mayor o igual que el número indicado, la condición se cumple. Con NOT inviertes el resultado.
  • IF string1==string2 comando: compara dos cadenas. Si son exactamente iguales (respetando mayúsculas/minúsculas salvo que se indique lo contrario), ejecuta la orden.
  • IF EXIST nombre_archivo comando: ejecuta el comando si existe (o no existe, con NOT) el archivo o carpeta indicado.

Además, la comparación de cadenas se puede ampliar usando operadores como EQU, NEQ, LSS, LEQ, GTR y GEQ en expresiones del estilo IF /I «%A» EQU «%B» comando, donde:

OPERADOR SIGNIFICADO
EQU igual a
NEQ no es igual a
LSS menor que
LEQ menor o igual que
GTR mayor que
GEQ mayor o igual que

Por otro lado, cada comando que se ejecuta genera un código de salida, accesible mediante ERRORLEVEL. Lo habitual es que un valor 0 signifique éxito y cualquier número distinto indique algún tipo de problema. Mediante combinaciones de IF ERRORLEVEL puedes tomar decisiones según lo que haya ocurrido en pasos anteriores del script.

Para crear saltos dentro de un mismo archivo se utiliza GOTO. Su funcionamiento se basa en etiquetas definidas con un nombre precedido por dos puntos. Por ejemplo, :menu define una etiqueta, y GOTO menu hace que la ejecución salte a esa línea y continúe desde ahí. Esto permite tanto saltos hacia adelante como bucles hacia atrás, aunque conviene tener cuidado para no generar ciclos infinitos por descuido.

Un complemento interesante es el comando CHOICE, que permite ofrecer al usuario un pequeño menú en consola para que elija una opción pulsando una tecla. Su sintaxis típica incluye parámetros como:

  • /C teclas: define el conjunto de teclas válidas; por defecto suele ser S y N.
  • /N: oculta la lista de opciones en pantalla, aunque siguen siendo válidas.
  • /S: obliga a diferenciar entre mayúsculas y minúsculas.
  • /T nn: establece un tiempo de espera en segundos antes de seleccionar la opción por defecto.
  • /D letra: indica cuál de las teclas definidas será la respuesta predeterminada tras agotarse el tiempo.
  • : el mensaje que se muestra al usuario al pedirle que elija.

La tecla que escoja el usuario se traduce en un valor de ERRORLEVEL, empezando por la última opción definida y bajando hacia la primera. De esta forma puedes encadenar una serie de IF ERRORLEVEL para ejecutar bloques distintos según la elección que haya hecho.

Bucles y procesamiento de ficheros con FOR

Si hay un comando que multiplica la potencia de los archivos .bat y .cmd, ese es FOR. Gracias a él puedes recorrer conjuntos de archivos, números o líneas de texto aplicando el mismo comando a cada elemento.

La forma general en un archivo batch es:

FOR %%variable IN (conjunto) DO comando

Donde la %%variable irá tomando cada uno de los valores definidos en el (conjunto), que puede ser una lista de elementos, un patrón de archivos o un rango numérico, y ejecutará el comando que indiques para cada caso. Cuando se usa FOR directamente en la línea de comandos, se utiliza un solo % en lugar de %%.

Los parámetros más interesantes de FOR incluyen:

  • /F: Permite trabajar con líneas de texto procedentes de un archivo o de la salida de otro comando. Se combina con opciones como:
    • eol=c: define un carácter que marca el comienzo de una línea de comentario.
    • skip=n: indica cuántas líneas del principio del fichero se saltan.
    • delims=c: especifica los caracteres que se consideran delimitadores para separar la línea en columnas o tokens.
    • tokens=x,y,m-n: define qué columnas de cada línea se asignan a cada variable de bucle (%%i, %%j, %%k, etc.).
  • /L: Hace que el conjunto sea un rango numérico del tipo (inicio,salto,fin). Por ejemplo, (1,2,100) recorre los números del 1 al 100 de dos en dos.
  • /R: Permite recorrer recursivamente un árbol de directorios aplicando el comando a todos los archivos encontrados en la ruta especificada.

Con estas variantes puedes crear desde listas de ficheros .EXE, .COM y .BAT de un directorio hasta scripts que abran uno a uno todos los .TXT y procesen su contenido. El resultado son bucles muy potentes sin salir de CMD, perfectos para tareas repetitivas.

CALL, START y uso de «funciones» en batch

En muchos casos un archivo .bat o .cmd no trabaja aislado, sino que necesita llamar a otros programas o incluso a otros scripts y luego continuar donde lo dejó. Para esto tienes dos comandos clave: CALL y START.

El más sencillo es CALL nombreDePrograma, que ejecuta otro archivo batch o un ejecutable y, cuando éste termina, vuelve al punto del script donde se hizo la llamada. Si pusieras directamente el nombre del archivo sin CALL, en muchos casos la ejecución del batch principal se daría por finalizada al lanzar el otro programa.

El comando START comparte esa idea pero es bastante más versátil: permite abrir programas en nuevas ventanas, cambiar el título de la consola, especificar prioridades y muchas más opciones. Con START /B puedes provocar que el programa se ejecute en la misma ventana en la que está corriendo el batch actual, lo que en determinadas situaciones es más cómodo.

A nivel interno, la combinación de etiquetas (:etiqueta) y CALL permite simular algo parecido a funciones reutilizables dentro del propio archivo .bat o .cmd. Puedes concentrar todas esas «funciones» al principio del fichero, y después tener una parte principal que las vaya invocando según sea necesario.

Un patrón muy habitual es comenzar el script con @ECHO OFF para ocultar comandos, y a continuación hacer un GOTO inicio (o llamar a una etiqueta equivalente) que actúe como «función principal». Cuando una de estas funciones internas termina, suele usarse GOTO :EOF para volver al punto desde el que fue llamada, cerrando así ese bloque concreto de lógica.

  ¿Cómo ejecutar programas en Windows 11?

Caso práctico: qué es un archivo .bat y cómo crear uno

Más allá de la teoría, un archivo .bat es simplemente un texto con extensión .bat que el sistema sabe interpretar con CMD. Crear uno en Windows 10 u 11 es pan comido y no hace falta nada más avanzado que el Bloc de notas.

Los pasos básicos serían: crear un nuevo documento de texto, escribir dentro los comandos que quieras, guardar el archivo y cambiarle la extensión de .txt a .bat. Si Windows no te deja ver las extensiones, tendrás que activar esa opción en el Explorador de archivos para poder renombrarlo correctamente.

Una vez cambiado el nombre, verás que el icono también cambia, indicando que el sistema ahora lo reconoce como archivo batch. Desde ahí puedes hacer clic derecho y elegir Editar para abrirlo de nuevo en el Bloc de notas, o ejecutarlo directamente haciendo doble clic.

Internamente, lo que ocurrirá al ejecutarlo es que Windows lanzará CMD.EXE, leerá el fichero línea a línea y ejecutará cada comando. Si entre medias encuentras una orden como PAUSE o CHOICE, la consola se quedará esperando a la interacción del usuario antes de seguir.

La gracia de todo esto es que, con un poco de práctica, puedes montar desde un sencillo «Hola mundo» hasta tareas mucho más elaboradas como cortar un programa automáticamente, crear copias incrementales de carpetas o lanzar utilidades de mantenimiento de forma periódica.

Ejemplos útiles de archivos .bat y .cmd

Para aterrizar todo lo anterior, merece la pena ver algunos ejemplos típicos que se usan mucho en el día a día y que muestran cómo combinar las piezas: comandos básicos, variables, mensajes y pausas.

Un primer ejemplo clásico es el archivo batch de «Hola mundo». Sería algo tan simple como:

@ECHO OFF
ECHO Hola, esto es un archivo batch.
PAUSE

En este pequeño script se desactiva la visualización de las órdenes, se muestra un mensaje de saludo y después se detiene la ejecución hasta que el usuario pulse una tecla. Ideal para empezar, comprobar que todo funciona y familiarizarse con la sintaxis.

Otro caso muy recurrente es el de crear carpetas automáticamente. Un ejemplo práctico podría ser:

@ECHO OFF
SET carpetaNombre=NuevaCarpeta
REM Define la ubicación del escritorio
SET escritorio=%USERPROFILE%\Desktop
REM Crea la carpeta en el escritorio
MKDIR «%escritorio%\%carpetaNombre%»
ECHO Carpeta «%carpetaNombre%» creada en el escritorio.
PAUSE

Aquí se utilizan variables para almacenar tanto el nombre de la carpeta como la ruta del escritorio del usuario, se añaden comentarios con REM para que el código sea más claro y se informa al final de que todo ha salido bien. Es un ejemplo sencillo pero ya mezcla varias ideas clave: SET, rutas de entorno y mensajes al usuario.

En el ámbito profesional, hay ejemplos más potentes, como scripts que llaman a utilidades externas tipo rclone para sincronizar carpetas con servicios en la nube, o archivos que se colocan en la carpeta de Inicio de Windows para lanzar tareas en segundo plano cada vez que arranca el sistema, como una copia de seguridad de Google Drive o el montaje de un recurso de red. También existe la opción de convertir BAT a EXE para distribuir utilidades con doble clic más controlado.

Usos habituales y buenas prácticas con .bat y .cmd

Los casos de uso de archivos .bat y .cmd son casi infinitos, pero hay varios escenarios en los que se siguen utilizando muchísimo, incluso aunque PowerShell y otras alternativas más modernas ganen terreno.

Por ejemplo, muchos usuarios los emplean para automatizar copias de seguridad simples: copiar el contenido de una carpeta de trabajo a otra unidad, comprimir ciertos ficheros, eliminar restos antiguos o rotar backups por fecha. Todo esto se puede hacer con copiar, mover, eliminar y un poco de lógica.

También son muy comunes para gestionar ficheros en masa, por ejemplo descomprimir un archivo, mover los resultados a otra carpeta, borrar el ZIP original y tal vez lanzar luego un script de análisis. Todo ello se lanza desde un único archivo .bat o .cmd que el usuario ejecuta cuando lo necesita.

En escenarios de mantenimiento se pueden encadenar comandos como SFC, CHKDSK o DISM dentro de un archivo batch para ejecutar un pequeño «pack de reparación» sobre el sistema: comprobar archivos dañados, revisar discos, etcétera, todo en lote y con un seguimiento controlado.

Otra posibilidad interesante es ejecutar comandos de aplicaciones de terceros mediante un .bat o .cmd. Si un programa ofrece una interfaz de línea de comandos, puedes envolverla en un script que se encargue de pasarle parámetros, procesar el resultado y programar su ejecución junto con otras tareas.

Sea cual sea el uso, conviene adoptar buenas prácticas: documentar el comportamiento con comentarios, validar que los archivos necesarios existen antes de operar, usar rutas claras (o relativas), mostrar mensajes comprensibles al usuario y evitar acciones destructivas sin confirmación previa cuando sea posible.

Los archivos batch también se ven en ámbitos como el SEO y la analítica, donde pueden lanzar de golpe varias herramientas de rastreo, agrupar resultados en ficheros, ordenar datos o mover informes a una ubicación concreta. En este contexto hay que ser especialmente cuidadoso al descargar scripts de terceros, ya que un simple comando malicioso dentro de un .bat o .cmd podría borrar datos o alterar configuraciones importantes.

Los archivos .bat y .cmd siguen siendo una pieza muy válida del ecosistema Windows: ligeros, fáciles de crear, ideales para automatizar comandos de CMD y lo bastante flexibles como para adaptarse a tareas sencillas o bastante complejas, siempre que conozcas bien las órdenes disponibles y planifiques con cabeza lo que quieres que hagan.

Artículo relacionado:
¿Cómo hacer un proceso batch?