Batch windows : utiliser la variable de la boucle for dans une autre commande

Bonjour,
Je cherche à créer un batch appelant un autre fichier de commande :

for /l %%i in (1,1,10) do (
E:
::création d’un dossier paramétré par la variable i de la boucle for
mkdir e:Tempzz%%i%
::appel d’un autre fichier .bat rentrant des données dans le dossier créé
call z.bat.bat
E:
cd E:Tempz%%i%
if exist “index.html” ren “index.html” “%%i%.html”
)

Dans la commande z.bat, j’utilise la référence au fichier crée : E:Tempzz%%i% pour y entrer des données

Et là, ça ne marche pas. Il semblerait que la variable i ne soit pas utilisable avec sa valeur dans z.bat. Tout le reste a l’air de fonctionner.

Comment faire?

Merci d’avance.

:hello: Bonsoir,

Et en appelant le batch z.bat avec le paramètre %1 qui vaut %%i cela ne fonctionne pas ?

exemple :


// dans le batch principal
call z.bat %%i


// dans le z.bat
cd %1
if exist .... etc...

Bonsoir,

Je ne comprends pas la réponse (je n’y connais pas grand chose en commande windows)!

voici z.bat :

C:
cd C:Program FilesWinHTTrack
httrack “http://XXX.net/YYY/index.php” -O “E:Temp/z/z%%i%”

où dois-je mettre %1?
que représente %1?

Merci
Edité le 29/12/2014 à 22:42

Je viens d’essayer :

call z.bat %%i dans le batch principal
ttrack “http://XXX.net/YYY/index.php” -O “E:Temp/z/z%1” dans le batch secondaire

et je tombe sur quelque chose de bizarre :

Si je lance le batch principal en mode administrateur, ça coince tout de suite : ‘z.bat’ n’est pas reconnu en tant que commande interne ou externe
Si je ne lance pas le batch principal en mode administrateur, tout se passe bien pour i=1 puis ça coince dès i=2 avec le même message : ‘z.bat’ n’est pas reconnu …

Une explication?

Merci d’avance.

:hello: Bonjour,

En fait le %1 représente le premier paramètre passé au batch z.bat (%2 le second, %3 troisième, etc…)

Et il est absolument nécessaire de faire comme cela car ta variable %%i n’est reconnue que dans le batch principal. Cela à beau être du batch, cela reste de la programmation avec une boucle et un appel de fonction, avec paramètre dans cette dernière.

Un exemple tout bête si tu veux voir ce que cela donne :

mon Main.bat



@echo off
for /l %%i in (1,1,10) do (
	call ff.bat "Ligne %%i"
)


mon ff.bat


@echo off
echo %1

Pour info mes 2 batch se trouvent dans le même dossier.

Le résultat à l’écran sera :

Peux-tu remettre le code de tes 2 batchs entre les balise CODE stp ?

Bonjour et merci de ces explications.

J’ai l’impression d’avoir plusieurs problèmes que j’ai essayé de décortiquer.

Version 1 :


for /l %%i in (1,1,10) do (
E:
mkdir E:Tempz%%i%
call z.bat %%i
ping localhost -n 15 >nul
)

code secondaire :


C:
cd C:Program FilesWinHTTrack
httrack "http://XXX.net/YYY/index.php" -O "E:Tempz%1"

Résultat :
Si je lance le batch principal en mode administrateur, ça coince tout de suite : ‘z.bat’ n’est pas reconnu en tant que commande interne ou externe
Si je ne lance pas le batch principal en mode administrateur, tout se passe bien!

Version 2 en ajoutant le traitement des fichiers à la suite de l’appel de z.bat, qui reste inchangé :


for /l %%i in (1,1,10) do (
E:
mkdir E:Tempz%%i%
call z.bat %%i
ping localhost -n 15 >nul
E:
cd E:Tempz%%i%
if exist "index.html" ren "index.html" "%%i%.html"
)

code secondaire :


C:
cd C:Program FilesWinHTTrack
httrack "http://XXX.net/YYY/index.php" -O "E:Tempz%1"

Résultat :
Si je lance le batch principal en mode administrateur, ça coince tout de suite : ‘z.bat’ n’est pas reconnu en tant que commande interne ou externe
Si je ne lance pas le batch principal en mode administrateur, ça se passe bien pour i=1 puis ‘z.bat’ n’est pas reconnu …

Je ne comprends rien à ce qui se passe!

:hello: Bonjour,

Il me semble que c’est normal qu’en le lançant en mode administrateur cela provoque une erreur sur “z.bat” car l’environnement n’est pas le même : Il se place dans C:/Windows/System32.

Pareil pour le 2ème tour de boucle : Tu ne trouves plus dans le dossier de ton Batch, mais dans “C:/Program Files/WinHTTrack”.
Il faudrait que, dans l’appel de ton z.bat, tu indiques le chemin complet de ce dernier.

Exemple, en partant du principe que z.bat se trouve dans C:/batch


for /l %%i in (1,1,10) do ( 
E: 
mkdir E:/Tempz%%i% 
call "C:/batch/z.bat" %%i 
ping localhost -n 15 >nul
)

Essaye ceci pour voir

Bon dieu, mais c’est bien sûr!!!
Merci beaucoup.