Diferencia entre % y %% en un Batch archivo

Siddharth Bishnoi 15 febrero 2024
  1. Uso de % y %% en CMD
  2. Uso de % y %% en un Batch archivo
  3. Uso de expansión retrasada en un Batch archivo
Diferencia entre % y %% en un Batch archivo

Los programadores por lotes a menudo confunden los símbolos de porcentaje simple (%) y porcentaje doble (%%) cuando se utilizan en un Batch archivo. Cuando se ejecuta en la línea de comandos, el comando FOR usa %f, mientras que, en un Batch archivo, usa %%f en lugar de un solo símbolo de porcentaje.

Los símbolos %, %%, %variable% y !variable! tienen algunas diferencias básicas y se usan claramente en la línea de comandos y en los archivos por lotes.

Este tutorial demuestra la diferencia entre % y %% en un Batch archivo. También analiza el uso de % y %% en archivos por lotes y cmd, junto con variables ambientales y variables de bucle.

Uso de % y %% en CMD

En un shell de línea de comandos, el %variable especifica un parámetro reemplazable de una sola letra. Ms-DOS usa %1,%2,...,%9 como parámetros de línea de comando reemplazables, es decir, %1 será reemplazado por el primer parámetro, pasado al Batch archivo.

El siguiente ejemplo muestra que un solo símbolo de porcentaje con una variable (%a) actúa como un carácter nulo:

set a="Hello World"
echo %a

Usar % en CMD

Cuando el signo de porcentaje se usa en ambos lados de una variable, es decir, %VARIABLE%, actúa como una variable de entorno y muestra el valor establecido cuando se usa con el comando echo. La %VARIABLE% se puede configurar con el comando set y acceder a ella con el comando echo.

El ejemplo se muestra a continuación.

set a="Hello World"
echo %a%

Salida - Usar % en CMD

Uso de % y %% en un Batch archivo

En los archivos por lotes, el shell de la línea de comandos lee todos los comandos de izquierda a derecha. Si lee el signo de porcentaje, continúa comprobando el carácter siguiente.

Lee %% como un solo %, es decir, reemplaza %% por un solo porcentaje y lee el tercer carácter. Si está en un bucle FOR, lo evaluará como en un bucle FOR.

El siguiente ejemplo explica el uso de %% en un bucle FOR.

FOR /L %%3 in (1,1,3) Do Echo %%3
PAUSE

Uso de %% en for Loop

Producción:

Salida - Uso de %% en for Loop

Si no es un bucle FOR, lo leerá como un carácter simple y se ejecutará igual que el comando %variable cuando se ejecuta directamente en el shell de línea de comandos.

set a="Hello World"
echo %%a
PAUSE

Uso de %% como carácter simple

Producción:

Salida: uso de %% como carácter sin formato

Si el carácter después del signo % es un número, se leerá como un parámetro de línea de comando. Si el carácter después de % no es ni un símbolo % ni un número, se leerá como una variable hasta el siguiente signo %; luego, mostrará su valor.

Por ejemplo,

set a="Hello World"
echo %a%
PAUSE

Uso del signo % para variables

Producción:

Salida - Uso del signo % para variables

Para usar un símbolo simple % en un Batch archivo como 50%, debe usar el %% en lugar de un solo signo %.

set a="The battery is charged 50%%"
echo %a%
PAUSE

Leer una cadena de inicio de sesión de %

Producción:

Salida: leer un % de cadena de inicio de sesión

El % y %% se utilizan principalmente en el comando FOR. Cuando el comando FOR se usa fuera de un Batch archivo, un solo signo % funciona bien.

Pero, cuando se usa dentro de un Batch archivo, debe reemplazarse por el doble %% para evitar errores. Además, se recomienda evitar el uso de números con el signo % como parámetros del comando FOR.

Uso de expansión retrasada en un Batch archivo

A veces, usar %VARIABLE% en un Batch archivo no imprime el resultado. Es porque cuando se realiza la expansión porcentual, la variable se expande antes de la ejecución, es decir, en el momento del análisis.

Cuando se usa en bucles, las variables solo se expanden una vez.

Para solucionar esto, puede utilizar la expansión diferida, es decir, un signo de exclamación (!variable!) en lugar de un signo de porcentaje (%variable%). La variable se expande en tiempo de ejecución cuando la expansión retrasada está habilitada.

En un bucle, se expande cada vez que se itera el bucle. Por lo tanto, expandir una variable usando ! se recomienda en lugar de %, principalmente cuando se utilizan bucles.

Para habilitar la expansión retrasada, podemos hacerlo con el comando SETLOCAL EnableDelayedExpansion y reemplazar % por !, como se muestra en el siguiente ejemplo.

@echo off
setlocal EnableDelayedExpansion
:: count to 5, storing results in a variable
set n=0
FOR /l %%G in (1,1,5) Do (echo [!n!] & set /a n+=1)
echo Total = %n%

Uso de expansión retrasada

Producción:

Salida - Uso de Expansión Retrasada

Entonces, discutimos la diferencia entre los signos % y %% cuando se usan en un Batch archivo y cmd. Cubrimos casi todo, incluido el uso de la expansión retrasada.

Artículo relacionado - Batch Command