Problème de programmation Notepad++

Fermé
Ronin - 12 févr. 2021 à 23:57
 Ronin - 17 févr. 2021 à 15:30
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
A voir également:

4 réponses

yg_be Messages postés 23535 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2025 Ambassadeur 1 579
13 févr. 2021 à 10:50
bonjour,
moi j'essaierais d'adapter le fichier .bat
0
Vous êtes d'une aide inestimable...
0
jordane45 Messages postés 38472 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2025 4 743 > Ronin
16 févr. 2021 à 08:59
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...
:-)
0
Ronin > jordane45 Messages postés 38472 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2025
16 févr. 2021 à 12:07
Beaucoup trop subtil alors...
0
@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
0
yg_be Messages postés 23535 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2025 1 579
16 févr. 2021 à 12:16
qu'appeles-tu "doublon dans les octets"?
peut-être avec des exemples.
0
Ronin > yg_be Messages postés 23535 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2025
17 févr. 2021 à 03:26
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.
0
yg_be Messages postés 23535 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2025 1 579 > Ronin
17 févr. 2021 à 10:54
qui tombe plusieurs fois dans la même adresse, ou globalement?
0
Ronin > yg_be Messages postés 23535 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2025
17 févr. 2021 à 12:59
Qui tombe plusieurs fois dans la même adresse.
0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 923
Modifié le 16 févr. 2021 à 15:20
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


0
Merci pour la proposition, j'ai essayé mais il y a eu des doublons quand même...
0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 923
17 févr. 2021 à 03:54
Je peux rajouter un filtre pour éviter les doublons dans les 5 octets.
0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 923 > barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024
Modifié le 17 févr. 2021 à 04:43
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
0
Ronin > barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024
17 févr. 2021 à 13:03
Ok merci, j'aimerais maintenant savoir s'il est possible d'éviter/interdire le 0 dans une adresse ?
0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 923 > Ronin
Modifié le 17 févr. 2021 à 13:51
Oui il suffit de rajouter +1 comme ceci :
set /a octet%2=!random! * %1 / 32768 + 1
0
Ronin > barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024
17 févr. 2021 à 15:30
Ok je vais voir ça. Merci
0