[Batch-Xp] Probleme de variable...

Probleme de variable... [Batch-Xp] - Shell/Batch - Programmation

Marsh Posté le 19-10-2007 à 16:16:01    

Bonjour,
 
Afin d'automatiser le déploiement d'une application sur une salle de pc, j'ai réalisé un script qui m'effectue plusieurs opérations (réveil des machines wol,copie des dossiers d'install et lancement de l'install avec psexec).
 
Ce script allumait le pc, pinguait la machine environ 60 fois (le temps qu'elle démarre) puis copiait les fichiers du serveur d'install vers
mon client.
J'ai voulu améliorer la partie qui s'occupait d'attendre le démarrage complet de la machine; et je me suis inspiré d'un code que j'ai trouvé ici, le but : si la machine répond au ping, alors on lance une copie des fichiers.
 
voici le code que j'ai simplifié pour vous cibler le problème:
 

Code :
  1. for %%p in (PC01, PC02, PC03 etc...) do (
  2. echo etape 1 - Reveil de la machine %%p
  3. call monscriptWOL.bat %%p
  4. :ping
  5. ping -n 1 %%p|find "TTL"
  6. if %errorlevel% NEQ 1 (goto:suite) else (goto :ping)
  7. :suite
  8. echo etape 2 - Copie des fichiers d'install sur %%p


 
Le problème est que lorsqu'on arrive sur la partie ":suite" la valeur de %%p n'est plus subtituée, j'ai un message "etape 2 - copie des fichiers d'install sur %p" (un seul %), pourtant mon premier echo affiche bien "etape 1 - Reveil de la machine PC01", pareil pour mon script et la commande ping...
 
Bref je patauge, j'espère avoir été clair dans mes explications, help  !  
 


---------------
Il [e2fsck] a bien démarré, mais il m'a rendu la main aussitot en me disant "houlala, c'est pas beau à voir votre truc, je préfèrerai que vous teniez vous même la tronçonneuse"
Reply

Marsh Posté le 19-10-2007 à 16:16:01   

Reply

Marsh Posté le 22-10-2007 à 08:21:57    

Je ne comprends pas pourquoi la partie ": ping" a une influence sur ma variable %%p  :(  
 
Personne n'aurait une idée ?


Message édité par microsoft le 22-10-2007 à 08:22:24

---------------
Il [e2fsck] a bien démarré, mais il m'a rendu la main aussitot en me disant "houlala, c'est pas beau à voir votre truc, je préfèrerai que vous teniez vous même la tronçonneuse"
Reply

Marsh Posté le 24-10-2007 à 11:37:56    

Essaye comme ca:

Code :
  1. for %%p in (PC01, PC02, PC03 etc...) do (
  2. set VrPingPc=%%p
  3. echo etape 1 - Reveil de la machine %%p
  4. call monscriptWOL.bat %%p
  5. :ping
  6. ping -n 1 %%p|find "TTL"
  7. if %errorlevel% NEQ 1 (goto:suite) else (goto :ping)
  8. :suite
  9. echo etape 2 - Copie des fichiers d'install sur %VrPingPc%

Reply

Marsh Posté le 24-10-2007 à 11:39:26    

Pourai tu poster ton code complet que je puisse le tester ?


Message édité par Coolnut le 24-10-2007 à 15:00:33
Reply

Marsh Posté le 24-10-2007 à 11:58:50    

Ta solution aurait fonctionné, mais en fait j'ai pu corriger le problème en supprimant les parenthèses sur la ligne "if" qui entouraient les gotos.
 
Par contre, la partie : ping ne fonctionne pas correctement:

Code :
  1. for %%p in (PC01, PC02, PC03 etc...) do (
  2. echo etape 1 - Reveil de la machine %%p
  3. call monscriptWOL.bat %%p
  4. :ping
  5. ping -n 1 %%p|find "TTL"
  6. if errorlevel 1 goto :ping else goto :suite
  7. :suite
  8. echo etape 2 - Copie des fichiers d'install sur %%p
  9. )


 
si le pc est déjà allumé tout va bien (la boucle : ping n'est exécutée qu'une fois), mais si le pc est en cours d'allumage (: ping doit alors s'exécuter en boucle, et sortir quand le pc répond) cela ne fonctionne toujours pas une fois le pc allumé, il ne semble pas sortir de la boucle.
 
J'ai pourtant fait des essai en ligne de commande, en utilisant

Code :
  1. ping -n 1 pc_allumé | find "TTL"


la valeur de errorlevel est bien 0 à ce moment, quand je teste sur un pc éteint, mon errorlevel est à 1.


---------------
Il [e2fsck] a bien démarré, mais il m'a rendu la main aussitot en me disant "houlala, c'est pas beau à voir votre truc, je préfèrerai que vous teniez vous même la tronçonneuse"
Reply

Marsh Posté le 25-10-2007 à 10:40:03    

c'est pas ton code complet ca, tu a dit que tu utiliser psexec, je ne voi pas psexec dans ce code
 
 
Au fait pour cette ligne:

Code :
  1. if errorlevel 1 goto :ping else goto :suite


Tu devrai utiliser des paranthése:

Code :
  1. if errorlevel 1 ( goto :ping ) else ( goto :suite )


Message édité par Coolnut le 25-10-2007 à 10:40:52
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed