OVH Cloud OVH Cloud

Incrémenter une IP de + 1 via un batch ?

5 réponses
Avatar
Laurent
Bonjour,

Quelqu'un pourrait-il me dire s'il est possible, via un batch, de
modifier une adresse IP définie dans une variable en incrémentant le
dernier bloc de +1 ?
Je bidouille un script qui me permet d'appliquer une config Ip
automatique, seulement, avant d'affecter l'adresse IP à la carte, je
vérifie si cette adresse n'est pas utilisée sur le réseau. Si elle
l'est, je lance "edit" pour modifier ce parametre dans le batch et il
faut bien sur redemarrer le script ... c'est plus automatique :o(
http://www.moreau-fr.net/reseau/script/batch/ip_conf_1.html
Je me disais qu'il y avait peut-être un moyen pour faire cela
de manière plus propre.
Sinon, existe t-il un équivalent de "read" ?
Je pourrais alors demander d'entrer une nouvelle adresse et recommencer
mon test.

Toute suggestion sera la bienvenue.

Cordialement,

Laurent

5 réponses

Avatar
Bra'tac
"Laurent" a écrit :
Bonjour,

Quelqu'un pourrait-il me dire s'il est possible, via un batch, de modifier
une adresse IP définie dans une variable en incrémentant le dernier bloc de
+1 ?
Je bidouille un script qui me permet d'appliquer une config Ip
automatique, seulement, avant d'affecter l'adresse IP à la carte, je vérifie
si cette adresse n'est pas utilisée sur le réseau. Si elle l'est, je lance
"edit" pour modifier ce parametre dans le batch et il faut bien sur
redemarrer le script ... c'est plus automatique :o(
http://www.moreau-fr.net/reseau/script/batch/ip_conf_1.html
Je me disais qu'il y avait peut-être un moyen pour faire cela
de manière plus propre.
Sinon, existe t-il un équivalent de "read" ?
Je pourrais alors demander d'entrer une nouvelle adresse et recommencer
mon test.

Toute suggestion sera la bienvenue.

Cordialement,

Laurent


Bonsoir
J'ai deux batchs qui font cela je te les envoient en bal si tu veux ?

GS

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com
Avatar
Jean-Claude BELLAMY
Dans le message 3ffef5e6$0$24016$,
Laurent <laurent~ s'est ainsi exprimé :

Bonjour,

Quelqu'un pourrait-il me dire s'il est possible, via un batch, de
modifier une adresse IP définie dans une variable en incrémentant le
dernier bloc de +1 ?


San problème !
(cf. plus bas)

Je bidouille un script qui me permet d'appliquer une config Ip
automatique, seulement, avant d'affecter l'adresse IP à la carte, je
vérifie si cette adresse n'est pas utilisée sur le réseau. Si elle
l'est, je lance "edit" pour modifier ce parametre dans le batch et il
faut bien sur redemarrer le script ... c'est plus automatique :o(
http://www.moreau-fr.net/reseau/script/batch/ip_conf_1.html
Je me disais qu'il y avait peut-être un moyen pour faire cela
de manière plus propre.
Sinon, existe t-il un équivalent de "read" ?
Je pourrais alors demander d'entrer une nouvelle adresse et
recommencer mon test.




Voci un exemple de script d'incrémentation d'adr.IP :
(je suppose que l'adresse est dans la variable "%adresse%")


fichier incrAdrIP.bat
---------- couper ici ----------
@echo off
set adrIP=%1
for /F "tokens=1-4 delims=." %%A in ("%adresse%") do (
set A1=%%A.%%B.%%C
set /A A2=%%D+1
)
set adresse=%A1%.%A2%
---------- couper ici ----------
NB: je suppose que l'on n'a pas atteint "255" (tu peux ajouter un test
d'erreur si besoin est)


:RESERVE
....
echo 4 : Incrémenter cette adresse automatiquement
....
set /P confnetúites votre choix (1-4):
for %%r in (1 2 3 4) do if %confnet%==%%r goto option%%r
echo Option invalide
Goto Erreur
:option1
goto EDIT
:option2
goto %CHOIX%
:option3
goto EXIT
:option4
call incrAdrIP.bat %adresse%
goto .....




Par ailleurs, j'ai vu que dans ton script il t'arrivait de souvent tester 2
fois une variable, suivant qu'elle est en minuscule ou majuscule
p.ex. :
if %reponse%==c goto MENU
if %reponse%==C goto MENU

Tu peux simplifer cela en UN SEUL test :
if /I %reponse%==c goto MENU

le commutateur "/I" signifie "Ignore" (la casse)



Egalement, tu peux alléger le script ici :
for %%r in (A a) do if %confnet%==%%r goto CHOIX_A
for %%r in (B b) do if %confnet%==%%r goto CHOIX_B
for %%r in (C c) do if %confnet%==%%r goto CHOIX_C
for %%r in (D d) do if %confnet%==%%r goto CHOIX_D
for %%r in (E e) do if %confnet%==%%r goto CHOIX_E
for %%r in (F f) do if %confnet%==%%r goto CHOIX_F
for %%r in (I i) do if %confnet%==%%r goto INFO
for %%r in (T t) do if %confnet%==%%r goto TCP
...


Dans ces cas là, j'écris ceci :
for %%r in (A B C D E F I T) do if /i %confnet%==%%r goto %%r
echo Option invalide
pause
goto Menu
:A
...
...
:B
...
..
:C
...
:I
...
:T
...


Enfin, dans les tests "if", je te signale que tu peux GROUPER des commandes
:
1) Soit par des "&" (comme dans les shells UNIX) :
if %machin%==truc action1 & action2 & set toto=bidule & call truc.bat

2) Soit à l'aide de bloc de parenthèses :
if %machin%==truc (
action1
action2
set toto=bidule
call truc.bat
)

Cela permet d'alléger considérablement les batchs.
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*
Avatar
Laurent Moreau
Super merci !

Grace à vos explications, cela fonctionne parfaitement :o)
Et comme suggéré, je test si le dernier bloc de l'adresse IP "D"
(A.B.C.D) n'à pas atteint la valeur 254, si tel est le cas,
j'incrémente alors le bloc "C" de +1, comme ceci:
(En précisant que "D" ne doit pas dépasser 254 et "C" 255)

------------------------------------------------------------
for /F "tokens=1-4 delims=." %%A in ("%adresse%") do (
set A1=%%A.%%B.%%C
set /A A2=%%D
)
echo %A2%>%TEMP%classec.txt
find "254" %TEMP%classec.txt > nul
if %ERRORLEVEL%==0 goto PLAGE
for /F "tokens=1-4 delims=." %%A in ("%adresse%") do (
set A1=%%A.%%B.%%C
set /A A2=%%D+1
)
set adresse=%A1%.%A2%
goto ...
:CLASSE
for /F "tokens=1-4 delims=." %%A in ("%adresse%") do (
set A1=%%A.%%B
set /A A2=%%C
set /A A3=%%D
)
echo %A2%>%TEMP%classeb.txt
find "255" %TEMP%classeb.txt > nul
if %ERRORLEVEL%==0 goto PLAGOUT
for /F "tokens=1-4 delims=." %%A in ("%adresse%") do (
set A1=%%A.%%B
set /A A2=%%C+1
)
set A3=1
set adresse=%A1%.%A2%.%A3%
goto ...
------------------------------------------------------------

Laurent Moreau

"Jean-Claude BELLAMY" a écrit dans le
message de news:btn3v1$mgi$
Dans le message 3ffef5e6$0$24016$,
Laurent <laurent~ s'est ainsi exprimé :

> Bonjour,
>
> Quelqu'un pourrait-il me dire s'il est possible, via un batch, de
> modifier une adresse IP définie dans une variable en incrémentant le
> dernier bloc de +1 ?
San problème !
(cf. plus bas)

> Je bidouille un script qui me permet d'appliquer une config Ip
> automatique, seulement, avant d'affecter l'adresse IP à la carte, je
> vérifie si cette adresse n'est pas utilisée sur le réseau. Si elle
> l'est, je lance "edit" pour modifier ce parametre dans le batch et il
> faut bien sur redemarrer le script ... c'est plus automatique :o(
> http://www.moreau-fr.net/reseau/script/batch/ip_conf_1.html
> Je me disais qu'il y avait peut-être un moyen pour faire cela
> de manière plus propre.
> Sinon, existe t-il un équivalent de "read" ?
> Je pourrais alors demander d'entrer une nouvelle adresse et
> recommencer mon test.


Voci un exemple de script d'incrémentation d'adr.IP :
(je suppose que l'adresse est dans la variable "%adresse%")


fichier incrAdrIP.bat
---------- couper ici ----------
@echo off
set adrIP=%1
for /F "tokens=1-4 delims=." %%A in ("%adresse%") do (
set A1=%%A.%%B.%%C
set /A A2=%%D+1
)
set adresse=%A1%.%A2%
---------- couper ici ----------
NB: je suppose que l'on n'a pas atteint "255" (tu peux ajouter un test
d'erreur si besoin est)


:RESERVE
....
echo 4 : Incrémenter cette adresse automatiquement
....
set /P confnetúites votre choix (1-4):
for %%r in (1 2 3 4) do if %confnet%==%%r goto option%%r
echo Option invalide
Goto Erreur
:option1
goto EDIT
:option2
goto %CHOIX%
:option3
goto EXIT
:option4
call incrAdrIP.bat %adresse%
goto .....




Par ailleurs, j'ai vu que dans ton script il t'arrivait de souvent tester


2
fois une variable, suivant qu'elle est en minuscule ou majuscule
p.ex. :
if %reponse%==c goto MENU
if %reponse%==C goto MENU

Tu peux simplifer cela en UN SEUL test :
if /I %reponse%==c goto MENU

le commutateur "/I" signifie "Ignore" (la casse)



Egalement, tu peux alléger le script ici :
for %%r in (A a) do if %confnet%==%%r goto CHOIX_A
for %%r in (B b) do if %confnet%==%%r goto CHOIX_B
for %%r in (C c) do if %confnet%==%%r goto CHOIX_C
for %%r in (D d) do if %confnet%==%%r goto CHOIX_D
for %%r in (E e) do if %confnet%==%%r goto CHOIX_E
for %%r in (F f) do if %confnet%==%%r goto CHOIX_F
for %%r in (I i) do if %confnet%==%%r goto INFO
for %%r in (T t) do if %confnet%==%%r goto TCP
...


Dans ces cas là, j'écris ceci :
for %%r in (A B C D E F I T) do if /i %confnet%==%%r goto %%r
echo Option invalide
pause
goto Menu
:A
...
...
:B
...
..
:C
...
:I
...
:T
...


Enfin, dans les tests "if", je te signale que tu peux GROUPER des


commandes
:
1) Soit par des "&" (comme dans les shells UNIX) :
if %machin%==truc action1 & action2 & set toto=bidule & call truc.bat

2) Soit à l'aide de bloc de parenthèses :
if %machin%==truc (
action1
action2
set toto=bidule
call truc.bat
)

Cela permet d'alléger considérablement les batchs.
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*




Avatar
Jean-Claude BELLAMY
Dans le message 4001b4b2$0$28683$,
Laurent Moreau <laurent~@moreau-fr.net> s'est ainsi exprimé :

Super merci !

Grace à vos explications, cela fonctionne parfaitement :o)
Et comme suggéré, je test si le dernier bloc de l'adresse IP "D"
(A.B.C.D) n'à pas atteint la valeur 254, si tel est le cas,
j'incrémente alors le bloc "C" de +1, comme ceci:
(En précisant que "D" ne doit pas dépasser 254 et "C" 255)

------------------------------------------------------------
for /F "tokens=1-4 delims=." %%A in ("%adresse%") do (
set A1=%%A.%%B.%%C
set /A A2=%%D
)
echo %A2%>%TEMP%classec.txt
find "254" %TEMP%classec.txt > nul
if %ERRORLEVEL%==0 goto PLAGE
[...]



Je te signale que tu peux utiliser DIRECTEMENT des tests arithmétiques,
beaucoup plus simples que ta manip en passant par un fichier texte.

if %A2% LEQ 253 set /A A2=%A2%+1 else goto PLAGOUT
...

Si les extensions de commandes sont activées, (ce qui est le cas par
défaut), IF admet les opérateurs de comparaison suivants :

EQU - égal à
NEQ - différent de
LSS - inférieur à
LEQ - inférieur ou égal à
GTR - supérieur à
GEQ - supérieur ou égal à

--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*
Avatar
etudiant35
Laurent a écrit le 09/01/2004 à 20h07 :
Bonjour,

Quelqu'un pourrait-il me dire s'il est possible, via un batch, de
modifier une adresse IP définie dans une variable en incrémentant
le
dernier bloc de +1 ?
Je bidouille un script qui me permet d'appliquer une config Ip
automatique, seulement, avant d'affecter l'adresse IP à la carte, je
vérifie si cette adresse n'est pas utilisée sur le réseau.
Si elle
l'est, je lance "edit" pour modifier ce parametre dans le batch et il

faut bien sur redemarrer le script ... c'est plus automatique :o(
http://www.moreau-fr.net/reseau/script/batch/ip_conf_1.html
Je me disais qu'il y avait peut-être un moyen pour faire cela
de manière plus propre.
Sinon, existe t-il un équivalent de "read" ?
Je pourrais alors demander d'entrer une nouvelle adresse et recommencer
mon test.

Toute suggestion sera la bienvenue.

Cordialement,

Laurent


Bonjour,

je suis exactement dans le même cas que toi.
Pourrais tu me faire parvenir les 2 fichiers bat si tu les a reçu ?


Par avance merci.