Problème de programmation Notepad++

Ronin -  
 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
A voir également:

4 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
moi j'essaierais d'adapter le fichier .bat
0
Ronin
 
Vous êtes d'une aide inestimable...
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > 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...
:-)
0
Ronin > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Beaucoup trop subtil alors...
0
Ronin
 
@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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
qu'appeles-tu "doublon dans les octets"?
peut-être avec des exemples.
0
Ronin > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Ronin
 
qui tombe plusieurs fois dans la même adresse, ou globalement?
0
Ronin > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
Qui tombe plusieurs fois dans la même adresse.
0
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
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
Ronin
 
Merci pour la proposition, j'ai essayé mais il y a eu des doublons quand même...
0
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
Je peux rajouter un filtre pour éviter les doublons dans les 5 octets.
0
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention  
 
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 14455 Date d'inscription   Statut Contributeur Dernière intervention  
 
Ok merci, j'aimerais maintenant savoir s'il est possible d'éviter/interdire le 0 dans une adresse ?
0
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > Ronin
 
Oui il suffit de rajouter +1 comme ceci :
set /a octet%2=!random! * %1 / 32768 + 1
0
Ronin > barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention  
 
Ok je vais voir ça. Merci
0