Partage
  • Partager sur Facebook
  • Partager sur Twitter

Simplification d'un .bat avec boucle for.

9 mars 2021 à 11:59:22

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.

Or, dans mon batch seulement 14 machines maximum car je n'ai pas été plus loin, le texte devient long et c'est pas intéressant à lire

– 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 connecte 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
)

J'avais commencé dans la première boucle on voit bien que : OBJET1 = Nom1, OBJET2 = Nom2 etc...

Quand le dossier se créer le résultat est :  1-LIGNE_NumLigne / le nom du dossier renseigner dans la première boucle n'apparait pas

@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% ?

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
)

Corentin

-
Edité par Cozxs 9 mars 2021 à 12:05:40

  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2021 à 14:48:51

il faut ajouter la ligne setlocal enabledelayedexpansion , fusionner les 2 boucles, et faire quelques modifications (dans le final, passer "@echo on" en "@echo off"

@echo on

:start
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% ?

setlocal enabledelayedexpansion

for /l %%X in (1,1,%nbr%) do (
	set /p OBJET= Nom de la machine %%X ?
	MD c:\TEMP\%%X-!OBJET!_LIGNE_%numligne%
	pause
)
endlocal
set /p start=Voulez vous creer une autre arborescence? o/n  
 
if %start%==o (
goto start
)
if %start%==n (
exit
)
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2021 à 16:11:46

franchement super, 

merci beaucoup j'aurais pas réussi à trouver seul

Je me permet de te poser une autre question :

J'aimerais avant le %%X dans la création des dossiers, que si le chiffre du dossier est inférieur à 10, il y a un 0 avant le chiffre, une fois passer la dizaine on enleve le premier 0

ex : 01 - TEST58_LIGNE_C

ex : 09 - TEST4_LIGNE_C

ex : 11 - TEST11_LIGNE_C

L12  : MD c:\TEMP\0%%X-!OBJET!_LIGNE_%numligne%





-
Edité par Cozxs 9 mars 2021 à 17:02:46

  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2021 à 18:30:27

for /l %%X in (1,1,%nbr%) do (
	set /p OBJET= Nom de la machine %%X ?
	set x=00%%X
	set x=!x:~-2!
	MD c:\TEMP\!x!-!OBJET!_LIGNE_%numligne%
	pause
)

sur la ligne 3: on met ici 2 zéros devant le nombre %%X

sur la ligne 4: on ne garde que 2 chiffres (caractères) de x

sur la ligne on utilise x pour le nom 

https://stackoverflow.com/questions/13398545/string-processing-in-windows-batch-files-how-to-pad-value-with-leading-zeros 

-
Edité par umfred 9 mars 2021 à 18:30:41

  • Partager sur Facebook
  • Partager sur Twitter