Cálculo (aritmética)

Mantenido el

A veces quieres que un archivo por lotes cuente repeticiones, calcule un total o genere un número aleatorio, como al tirar un dado.

Para hacer cálculos en el símbolo del sistema, añade la opción /a al comando set. Este artículo explica desde el uso básico hasta las precauciones con las que es fácil tropezar.

Uso básico

Sintaxis
set /a nombre_de_variable=expresión
set /a RESULT=10 + 5
echo %RESULT%
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>set /a RESULT=10 + 5
15
C:\users\user>

El resultado se asigna a la variable RESULT. Si escribes el comando directamente en el símbolo del sistema, el resultado se muestra tal cual. Dentro de un archivo por lotes no se muestra, así que usa echo si necesitas imprimirlo.

No encierres las variables entre % dentro de la expresión

Dentro de una expresión de set /a puedes escribir los nombres de variable tal cual. Como en set /a TOTAL=PRICE * 3, se usa el valor de la variable sin encerrarla entre % o !. Una variable que no existe se trata como 0.

Operadores disponibles

OperadorSignificadoEjemploResultado
+Sumaset /a X=7 + 310
-Restaset /a X=7 - 34
*Multiplicaciónset /a X=7 * 321
/División (entera)set /a X=7 / 32
%Restoset /a X=7 %% 3 (en un archivo por lotes)1
( )Indicar la prioridadset /a X=(2 + 3) * 420

La multiplicación, la división y el resto se evalúan antes que la suma y la resta.

En archivos por lotes, el resto se escribe %%

El % que calcula el resto debe duplicarse como %% dentro de un archivo por lotes. Si lo escribes directamente en el símbolo del sistema, escribe un solo %.

Actualizar una variable (contadores y totales)

Puedes usar +=, -=, *=, /= y %%=, que asignan y calculan en un solo paso. (%%= es la forma para archivos por lotes; si lo escribes directamente en el símbolo del sistema, usa %=.)

Incrementar
set COUNT=0
set /a COUNT+=1
set /a COUNT+=1
echo %COUNT%
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %COUNT%
2
C:\users\user>
おすすめ書籍※ 広告を含む場合があります
中小企業経営者のためのRPA入門 RPA導入を成功させる方法

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超入門

60分でわかる! AIエージェント 超入門

コマンドラインの黒い画面が怖いんです。

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

Este es un ejemplo que calcula un total dentro de un bucle for. set /a puede leer variables directamente dentro del bucle, pero se necesita expansión retardada (!nombre_de_variable!) para mostrar el total parcial con echo dentro del bucle.

sum.cmd
@echo off
setlocal EnableDelayedExpansion
set SUM=0
for %%N in (10 20 30) do (
    set /a SUM+=%%N
    echo Total parcial: !SUM!
)
echo Total: !SUM!
endlocal
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>sum.cmd
Total parcial: 10
Total parcial: 30
Total parcial: 60
Total: 60
C:\users\user>

Consulta el artículo sobre la expansión retardada para más detalles.

No admite decimales

set /a solo trabaja con números enteros. En el resultado de una división se descarta la parte decimal.

set /a X=7 / 2
echo %X%
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %X%
3
C:\users\user>

Si necesitas decimales, una opción es multiplicar antes por 100 o similar y calcular con enteros.

Calcular
set PRICE=1980
set /a TAX=PRICE * 10 / 100
set /a TOTAL=PRICE + TAX
echo Impuesto: %TAX% / Total con impuesto: %TOTAL%
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>Mostrar el impuesto y el total
Impuesto: 198 / Total con impuesto: 2178
C:\users\user>

Si necesitas un cálculo decimal exacto, también puedes llamar a PowerShell.

powershell -NoProfile -Command "[math]::Round(1980 * 1.1)"

Generar números aleatorios

%RANDOM% devuelve un número aleatorio de 0 a 32767. Si usas el resto, puedes acotar el rango.

Un
set /a DICE=%RANDOM% %% 6 + 1
echo %DICE%

%RANDOM% %% 6 da de 0 a 5, así que + 1 lo convierte en de 1 a 6.

Hexadecimal y operaciones de bits

Si antepones 0x, puedes indicar un número hexadecimal.

set /a X=0xFF
echo %X%
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %X%
255
C:\users\user>

Entre las operaciones de bits están & (AND), | (OR), ^ (XOR), << y >>. Como también son caracteres especiales del símbolo del sistema, debes encerrar toda la expresión entre comillas dobles.

set /a "X=6 & 3"
set /a "Y=1 << 4"
echo %X% %Y%
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %X% %Y%
2 16
C:\users\user>

Si escribes set /a X=6 & 3 sin comillas, & se interpreta como separador de comandos y el comportamiento no es el esperado.

Precauciones

El rango es de enteros de 32 bits

Los números que se pueden manejar van de -2147483648 a 2147483647. Si el resultado de un cálculo se sale del rango, no se produce un error; el valor se desborda y se obtiene un valor incorrecto. Sin embargo, escribir directamente un número fuera de rango como 2147483648 sí produce un error.

set /a X=2147483647 + 1
echo %X%
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %X%
-2147483648
C:\users\user>

Ten cuidado al trabajar con números grandes, por ejemplo al calcular tamaños de archivo.

Los números que empiezan por 0 se tratan como octales

Los números que empiezan por 0, como 08 o 09, se interpretan como octales. En octal no existen el 8 ni el 9, así que se produce un error.

set /a X=08 + 1
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>set /a X=08 + 1
Número no válido. Las constantes numéricas son decimales (17), hexadecimales (0x11) u octales (021).
C:\users\user>

Este problema aparece cuando usas directamente en un cálculo valores extraídos de %TIME%, como minutos o segundos como «08» o «09». Si antepones 1 y restas 100, se tratan como decimales.

Quitar
set MIN=%TIME:~3,2%
set /a MIN=1%MIN% - 100
echo %MIN%

Si MIN es 08, entonces 108 - 100 da 8.

Dividir entre 0 produce un error

set /a X=10 / 0
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>set /a X=10 / 0
Error de división entre cero.
C:\users\user>

Si el divisor es una variable, comprueba con if que no sea 0 antes de calcular.

Mostrar un resultado rellenado con ceros

Para nombres de archivo secuenciales (001, 002), resulta práctico sumar 1000 y luego tomar los dígitos de la derecha.

Rellenar
set /a NUM=1000 + 7
echo %NUM:~1%
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %NUM:~1%
007
C:\users\user>
チェック

Cómo extraer una parte de una cadena se explica en detalle en el artículo sobre operaciones con cadenas.

Resumen

Qué quieres hacerCómo se escribe
Guardar un resultado en una variableset /a X=1 + 2
Contar hacia arribaset /a COUNT+=1
Obtener el resto (en un archivo por lotes)set /a X=10 %% 3
Número aleatorio de 1 a Nset /a X=%RANDOM% %% N + 1
Operación de bitsset /a "X=6 & 3" (entre comillas)
Cálculo con decimalesMultiplicar por 100 y usar enteros, o usar PowerShell

Artículos relacionados

Ejercicio

Problema de práctica

¿Cuál es la forma correcta de asignar a la variable R el resto de dividir 10 entre 3 dentro de un archivo por lotes?

Elige una respuesta.

  1. set /a R=10 %% 3
  2. set R=10 % 3
  3. set /a R=10 mod 3

Problema de práctica

¿Cuál es el valor de X tras ejecutar set /a X=7 / 2?

Elige una respuesta.

  1. 3 (se descarta la parte decimal)
  2. 3.5
  3. 4 (se redondea)
#Línea de comandos #Archivos por lotes #Cálculo #set #Variable