Problème de programmation Notepad++

Bonjour,

J'aimerai un coup de pouce pour me débloquer. J'ai un fichier .bat qui génère aléatoirement des adresses ip et masque de sous-réseau associé à cette adresse ip, j'aimerai savoir comment je peux faire en sorte d'éviter les doublons dans les octets, je précise que je travail avec Notepad++. Merci

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    bonjour,
    moi j'essaierais d'adapter le fichier .bat
    1. Vous êtes d'une aide inestimable...
    2. Modérateur
      @RoninBonjour,
      Je pense que c'était une façon subtile de te dire que sans voir le code il nous est impossible de te répondre...
      :-)
  2. @echo off

    REM DEBUT DU PROGRAMME
    :start

    REM CLEAR SCREEN
    cls

    REM PREMIER OCTET
    :A
    set /a A=%random%
    if %A% GTR 49 goto A

    REM DEUXIEME OCTET
    :B
    set /a B=%random%
    if %B% GTR 49 goto B

    REM TROISEME OCTET
    :C
    set /a C=%random%
    if %C% GTR 49 goto C

    REM QUATRIEME OCTET
    :D
    set /a D=%random%
    if %D% GTR 49 goto D

    REM CINQUIEME OCTET
    :E
    set /a E=%random%
    if %E% GTR 49 goto E

    REM DEFINITION DE LA CLASSE
    if %A% LEQ 10 goto NMA

    REM NETMASK CLASSE A
    :NMA
    set /a NM=%random%
    if %NM% LSS 1 goto NMA
    if %NM% GTR 10 goto NMA
    goto result

    REM RESULTAT
    :result
    echo %A%.%B%.%C%.%D%.%E%/%NM%
    pause > nul

    REM REDEMARRAGE DU PROGRAMME
    goto start
    1. Contributeur
      qu'appeles-tu "doublon dans les octets"?
      peut-être avec des exemples.
    2. @yg_beBah un doublon c'est simple c'est un nombre qui tombe plusieurs fois. Et c'est ce que je souhaite éviter. J'aimerai aussi interdire le 0 dans les octets.
    3. Contributeur
      @Roninqui tombe plusieurs fois dans la même adresse, ou globalement?
    4. @yg_beQui tombe plusieurs fois dans la même adresse.
  3. Bonjour,

    Tu utilises %RANDOM% sans lui définir un nombre mini et maxi, donc ton script passe son temps à générer des nombres inutiles, puisque en dehors de la fourchette utile.

    Apparemment la commande %RANDOM% se base sur l'heure système pour générer ses nombres, donc pour ne pas se retrouver avec à chaque fois les mêmes nombres générés je suggère d'instaurer une temporisation d'une seconde entre chaque génération.

    En modifiant légèrement ton script, voilà ce que ça donnerait :

    @echo off
    setlocal enableextensions enabledelayedexpansion
    
    REM DEBUT DU PROGRAMME
    :start
    
    REM CLEAR SCREEN
    cls & set "address="
    
    REM LES 5 OCTETS
    for /L %%A in (1,1,5) do call :generator 49 %%A
    
    REM DEFINITION DE LA CLASSE
    if !octet1! LEQ 10 goto NMA
    
    REM NETMASK CLASSE A
    :NMA
    
    timeout /t 1 /nobreak >nul
    set /a NM=!random! * 10 / 32768 + 1
    
    if %NM% LSS 1 goto NMA
    if %NM% GTR 10 goto NMA
    
    goto result
    
    REM RESULTAT
    :result
    
    cls & echo. & echo Resultat = !address:~1!/%NM%
    echo. & pause
    
    REM REDEMARRAGE DU PROGRAMME
    goto start
    
    REM GENERATION D'UN NOMBRE ALEATOIRE
    :generator
    
    timeout /t 1 /nobreak >nul
    set /a octet%2=!random! * 50 / 32768 + 1
    
    if !octet%2! GTR %1 (goto :generator) else (set "address=!address!.!octet%2!")
    cls & echo. & echo Adresse = !address:~1!
    
    goto :eof


    1. Merci pour la proposition, j'ai essayé mais il y a eu des doublons quand même...
      1. Je peux rajouter un filtre pour éviter les doublons dans les 5 octets.
      2. @barnabe0057Voilà tu n'auras plus de doublons :

        @echo off
        setlocal enableextensions enabledelayedexpansion
        
        REM DEBUT DU PROGRAMME
        :start
        
        REM CLEAR SCREEN
        cls & set "address="
        
        REM LES 5 OCTETS
        for /L %%A in (1,1,5) do call :generator 49 %%A
        
        REM DEFINITION DE LA CLASSE
        if !octet1! LEQ 10 goto NMA
        
        REM NETMASK CLASSE A
        :NMA
        
        timeout /t 1 /nobreak >nul
        set /a NM=!random! * 9 / 32768 + 1
        
        if %NM% LSS 1 goto NMA
        if %NM% GTR 10 goto NMA
        
        goto result
        
        REM RESULTAT
        :result
        
        cls & echo. & echo Resultat = !address:~1!/%NM%
        echo. & pause
        
        REM REDEMARRAGE DU PROGRAMME
        goto start
        
        REM GENERATION D'UN NOMBRE ALEATOIRE
        :generator
        
        timeout /t 1 /nobreak >nul
        set /a octet%2=!random! * %1 / 32768
        
        if !octet%2! GTR %1 (goto :generator)
        echo !address! | findstr "\<!octet%2!\>" >nul && goto :generator || set "address=!address!.!octet%2!"
        cls & echo. & echo Adresse = !address:~1!
        
        goto :eof
      3. @barnabe0057Ok merci, j'aimerais maintenant savoir s'il est possible d'éviter/interdire le 0 dans une adresse ?
      4. @RoninOui il suffit de rajouter +1 comme ceci :
        set /a octet%2=!random! * %1 / 32768 + 1