Forum Clubic

Batch boucle for

Bonjour à tous,

Je rencontre un problème sur un petit fichier .bat que j’essaye de faire fonctionner, pour effectuer une standardisation d’arborescence.

Voici le code :

@echo on
set /p numligne=Quel est le nom de la ligne ?

set /p nbr=Combien de machine connecte au reseau as-tu sur la ligne %numligne% ?

MD c:« FTP AUTOM »

for /l %%X in (1,1,%nbr%) do (
set /p OBJET%%X=Nom de la machine %%X ?
)

pause
for /l %%X in (1,1,%nbr%) do (
MD c:\FTP%%X-%OBJET%%X%LIGNE%numligne%
pause

pause
)

if %X% == %nbr%
set /p start=Voulez vous creer une autre arborescence? o/n

if %start%==o (
goto start
)
if %start%==n (
exit
)

Explication :
Je pose deux questions, le nom de la ligne et le nombre de machine.
Je créer un dossier dans le C qui s’appelle FTP AUTOM, se dossier restera vide.

Ensuite je créer une première boucle for qui me permet de sauvegarder le nom de mes machines dans la valeur OBJET%%X pour l’intégrer dans le titre de mes futurs dossier.
Avec pour question : Nom machine 1 ensuite Nom machine 2 etc…

La deuxième boucle FOR permet de créer les dossiers du style :
1 - [NOM MACHINE]LIGNE[NUM_LIGNE].
2 - [NOM MACHINE]LIGNE[NUM_LIGNE].
etc…

Or, les dossiers se créer mais le nom de machine je n’arrive pas à le faire apparaitre dans le nom
Je me retrouve avec :

1 - LIGNE[NUM_LIGNE]
2 - LIGNE[NUM_LIGNE]
3 - LIGNE[NUM_LIGNE]

exemple du cmd :

C:\Users>set /p numligne=Quel est le nom de la ligne ?
Quel est le nom de la ligne ? C2

C:\Users>set /p nbr=Combien de machine connecte au reseau as-tu sur la ligne C2 ?
Combien de machine connecte au reseau as-tu sur la ligne C2 ?5

C:\Users>for /L %X in (1 1 5) do (set /p OBJET%X=Nom de la machine %X ? )

C:\Users>(set /p OBJET1=Nom de la machine 1 ? )
Nom de la machine 1 ?DDD

C:\Users>(set /p OBJET2=Nom de la machine 2 ? )
Nom de la machine 2 ?FFF

C:\Users>(set /p OBJET3=Nom de la machine 3 ? )
Nom de la machine 3 ?GGG

C:\Users(set /p OBJET4=Nom de la machine 4 ? )
Nom de la machine 4 ?ZZZ

C:\Users>(set /p OBJET5=Nom de la machine 5 ? )
Nom de la machine 5 ?EEE

C:\Users>pause
Appuyez sur une touche pour continuer…

C:\Users>for /L %X in (1 1 5) do (
MD c:\FTP%X-Xnumligne
pause
pause
)

C:\Users>(
MD c:\FTP\1-Xnumligne
pause
pause
)

Merci de votre aide

Teste voir si ta première boucle créé bien les variable OBJET1…n comme voulue, avec un echo %OBJET%%X juste après le set /p OBJET… Je ne suis pas sûr que cette syntaxe soit correct (mais je n’ai pas fait de batch depuis très longtemps).

Et sur cette ligne il manque peut-être un % après le premier %%X :

c:\FTP%%X-%OBJET%%X%

Ce serait plus simple de ne faire qu’une seule boucle.
for /l %%X in (1,1,%nbr%) do (
set /p OBJET=Nom de la machine %%X ?
MD c:\FTP%%X-%OBJET%LIGNE%numligne%
)

Salut tfpsly,
merci d’avoir pris le temps de lire ma demande

1 - Comme écris plus haut dans l’exemple cmd, on voit bien que l’objet s’incrémente correctement 1 ensuite 2 etc…

2 -Même avec la ligne que tu as écris ce n’est pas fonctionnel, il me semble que c’est ce que j’avais déjà écris de base, j’ai essayé plusieurs syntaxe aucune ne fonctionne,
Je tiens à signaler que le problème est au niveau du %OBJET%, le nom de la machine ne s’ajoute pas dans le nom du dossier.

3 - En ce qui concerne une seul boucle, j’ai testé, mais ce qui est bizarre c’est que même dans la syntaxe que tu as écris il créer le dossier et ensuite pose la question, donc le nom du dossier veut rien dire… Voila pourquoi j’ai essayé de faire 2 boucles indépendantes.

Corentin

Je comprend pas bien le but de ce fichier BAT.
je vois une suite pas logique
La ligne
if %X% == %nbr%

c’est pas plutôt
if %%X == %nbr%
???

Bonjour,

Le but du batch est de créer une architecture de dossier standard, juste le nom change en fonction de ce qu’on rajoute.
C’est pour éviter de créer les dossiers à la main un par un quand tu as 40 machines par exemple.

J’ai essayé les deux méthodes, les deux fonctionnent Nycko69.

Enfaite voici un autre batch que j’ai créer qui fonctionne, mais seulement 14 machines max, et une longueur abominable car pas de boucle for :

– Je souhaite mettre ce code en format boucle for pour pouvoir intégrer autant de dossier que je veux en fonction de la question 2 : Combien de machine conncte au réseau ?

@echo off
set /p numligne=Quel est le numero de la ligne ?

set /p nbr=Combien de machine connecte au reseau as-tu sur la ligne %numligne% ?

MD c:« FTP AUTOM »

:L1
set /p m1=Nom de la machine 1 ?
MD c:\FTP\01-"%m1%"LIGNE%numligne%
set /a f = 1
if %nbr%==%f% (
goto:jump
)

:L2
set /p m2=Nom de la machine 2 ?
MD c:\FTP\02-"%m2%"LIGNE%numligne%
set /a f = 2
if %nbr%==%f% (
goto:jump
)

:L3
set /p m3=Nom de la machine 3 ?
MD c:\FTP\03-"%m3%"LIGNE%numligne%
set /a f = 3
if %nbr%==%f% (
goto:jump
)

:L4
set /p m4=Nom de la machine 4 ?
MD c:\FTP\04-"%m4%"LIGNE%numligne%
set /a f = 4
if %nbr%==%f% (
goto:jump
)

:L5
set /p m5=Nom de la machine 5 ?
MD c:\FTP\05-"%m5%"LIGNE%numligne%
set /a f = 5
if %nbr%==%f% (
goto:jump
)

:L6
set /p m6=Nom de la machine 6 ?
MD c:\FTP\06-"%m6%"LIGNE%numligne%
set /a f = 6
if %nbr%==%f% (
goto:jump
)

:L7
set /p m7=Nom de la machine 7 ?
MD c:\FTP\07-"%m7%"LIGNE%numligne%
set /a f = 7
if %nbr%==%f% (
goto:jump
)

:L8
set /p m8=Nom de la machine 8 ?
MD c:\FTP\08-"%m8%"LIGNE%numligne%
set /a f = 8
if %nbr%==%f% (
goto:jump
)

:L9
set /p m9=Nom de la machine 9 ?
MD c:\FTP\09-"%m9%"LIGNE%numligne%
set /a f = 9
if %nbr%==%f% (
goto:jump
)

:L10
set /p m10=Nom de la machine 10 ?
MD c:\FTP\10-"%m10%"LIGNE%numligne%
set /a f = 10
if %nbr%==%f% (
goto:jump
)

:L11
set /p m11=Nom de la machine 11 ?
MD c:\FTP\11-"%m11%"LIGNE%numligne%
set /a f = 11
if %nbr%==%f% (
goto:jump
)

:L12
set /p m12=Nom de la machine 12 ?
MD c:\FTP\12-"%m12%"LIGNE%numligne%
set /a f = 12
if %nbr%==%f% (
goto:jump
)

:L13
set /p m13=Nom de la machine 13 ?
MD c:\FTP\13-"%m13%"LIGNE%numligne%
set /a f = 13
if %nbr%==%f% (
goto:jump
)

:L14
set /p m14=Nom de la machine 14 ?
MD c:\FTP\14-"%m14%"LIGNE%numligne%
set /a f = 14
if %nbr%==%f% (
goto:jump
)

:jump
set /p start=Voulez vous creer une autre arborescence? o/n

if %start%==o (
goto start
)
if %start%==n (
exit
)

Corentin

Bonjour Corentin,

Si tu repasses par ici, voici la solution :

@echo off
setlocal enableextensions enabledelayedexpansion
ver | find "10.0." >nul && chcp 65001 >nul || chcp 28591 >nul

set /p numligne="Quel est le numéro de la ligne ? "
set /p nbr="Combien de machines connectées au réseau as-tu sur la ligne %numligne% ? "

if not exist "C:\FTP AUTOM" (MD "C:\FTP AUTOM")

for /L %%A in (1,1,%nbr%) do (

set "index=0%%A"
echo. & set /p mac%%A="Nom de la machine %%A ? "
MD "C:\FTP\!index:~-2!-!mac%%A!-LIGNE %numligne%" >nul 2>&1

)

:jump

echo. & set /p start="Voulez-vous créer une autre arborescence ? o/n "

if /i "%start%"=="o" (goto :start)
if /i "%start%"=="n" (exit)

goto :jump
1 J'aime