es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comparar dos números que representan la versión de un software con varios puntos.

Quiero crear una función que compare/verifique si un número de versión es menor que otro. Los números son:

$version1 = 23.0.46.0
$version2 = 24.1.154.0

Cuando uso una simple condición if como la siguiente, no funciona porque me devuelve False:

IF(23.0.46.0 -lt 24.1.154.0){
    Write-Host "True"
}
Else
{
    Write-Host "False"
}

Tengo la idea de dividir el número de versión por los puntos en un arreglo. Luego, hacer un bucle para comparar las partes de cada versión hasta que una sea menor que la otra. En este caso, sería directamente en la primera iteración porque 23<24. Sin embargo, soy nuevo en PowerShell.

Gracias por tu ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Creando una función para comparar números de versión

    Paso 1: Dividir los números de versión en arrays

    Primero, necesitamos dividir los números de versión en arrays. Podemos usar el método Split para esto.

    $version1 = '23.0.46.0'
    $version2 = '24.1.154.0'
    
    $v1 = $version1.Split('.')
    $v2 = $version2.Split('.')
    

    Paso 2: Comparar cada elemento de los arrays

    Luego, necesitamos recorrer cada elemento de los arrays y compararlos. Podemos usar un bucle for para esto.

    for ($i = 0; $i -lt $v1.Count; $i++) {
        if ([int]$v1[$i] -lt [int]$v2[$i]) {
            Write-Host "$version1 es menor que $version2"
            break
        }
        elseif ([int]$v1[$i] -gt [int]$v2[$i]) {
            Write-Host "$version1 es mayor que $version2"
            break
        }
        else {
            continue
        }
    }
    

    Esto recorrerá cada elemento de los arrays y los comparará. Si un número de versión es menor que el otro, mostrará un mensaje indicándolo y saldrá del bucle. Si un número de versión es mayor que el otro, mostrará un mensaje indicándolo y saldrá del bucle. Si las versiones son iguales, continuará con el siguiente elemento.

    Ahora podemos encapsular todo esto dentro de una función:

    function Comparar-Versiones {
        [CmdletBinding()]
        param (
            [Parameter(Mandatory = $true)]
            [string]$Version1,
            [Parameter(Mandatory = $true)]
            [string]$Version2
        )
    
        $v1 = $Version1.Split('.')
        $v2 = $Version2.Split('.')
    
        for ($i = 0; $i -lt $v1.Count; $i++) {
            if ([int]$v1[$i] -lt [int]$v2[$i]) {
                Write-Host "$Version1 es menor que $Version2"
                break
            }
            elseif ([int]$v1[$i] -gt [int]$v2[$i]) {
                Write-Host "$Version1 es mayor que $Version2"
                break
            }
            else {
                continue
            }
        }
    }
    

    Ahora podemos llamar a esta función con los números de versión como parámetros:

    Comparar-Versiones -Version1 '23.0.46.0' -Version2 '24.1.154.0'
    

    Esto mostrará “23.0.46.0 es menor que 24.1.154.0”.

Comments are closed.