Problème de programmation Notepad++

Signaler
-
 Ronin -
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

Messages postés
14284
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 février 2021
804
bonjour,
moi j'essaierais d'adapter le fichier .bat
Vous êtes d'une aide inestimable...
Messages postés
31455
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 février 2021
3 277 > Ronin
Bonjour,
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...
:-)
>
Messages postés
31455
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 février 2021

Beaucoup trop subtil alors...
@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
Messages postés
14284
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 février 2021
804
qu'appeles-tu "doublon dans les octets"?
peut-être avec des exemples.
>
Messages postés
14284
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 février 2021

Bah 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.
Messages postés
14284
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 février 2021
804 > Ronin
qui tombe plusieurs fois dans la même adresse, ou globalement?
>
Messages postés
14284
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 février 2021

Qui tombe plusieurs fois dans la même adresse.
Messages postés
13297
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
22 février 2021
4 170
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



“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
Merci pour la proposition, j'ai essayé mais il y a eu des doublons quand même...
Messages postés
13297
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
22 février 2021
4 170
Je peux rajouter un filtre pour éviter les doublons dans les 5 octets.
Messages postés
13297
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
22 février 2021
4 170 >
Messages postés
13297
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
22 février 2021

Voilà 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
>
Messages postés
13297
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
22 février 2021

Ok merci, j'aimerais maintenant savoir s'il est possible d'éviter/interdire le 0 dans une adresse ?
Messages postés
13297
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
22 février 2021
4 170 > Ronin
Oui il suffit de rajouter +1 comme ceci :
set /a octet%2=!random! * %1 / 32768 + 1
>
Messages postés
13297
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
22 février 2021

Ok je vais voir ça. Merci