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.
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 …
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 ?
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 …
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
)