Un petit batch avec boucle / Call / parametre et condition

Un petit batch avec boucle / Call / parametre et condition - Shell/Batch - Programmation

Marsh Posté le 18-06-2008 à 14:28:34    

Je cherche à automatiser + log d'un batch qui fait une boucle sur un réseau pour supprimer des raccourcis du menu démarrer.
 
En Algo ca donne à peu pret ça pour 100 PC executé en session root qui peut librement acceder aux C: des postes réseaux :
 
___________________________________________________________
 
Pour les PC de 1 à 100  
   Si elle est allumé / "pingable" (ou autre test pour voir si machine allumée genre net use / If EXIST ...)
            Alors |Je supprime mes 2 vieux racc dans le menu démarrer
                    J'écris dans un fichier log  Le Pc X est fait
   FinSi
Fin du Pour
 
___________________________________________________________
 
J'ai déja un Bat qui fait la boucle et qui supprime, mon probleme est que chaque machine pas allumé fait ramer le script à mort, sur 70PC ca a mis 2h et je ne sais pas lequels ont été traité.
 
 
Le batch Beta 0.1 qui marchera avec votre aide !
 

Main.bat

 
For /L %%N IN (1,1,100) Do (
 IF Le pc est allumé    "pingable" ou tester si un fichier existe dessus ou tester le monter en lecteur réseau ou autre idée ?  
      Call Del.bat %N    qui sera le fichier qui supprime les raccourcis et fait le log  avec passage du numero de PC en paramètre
)    

Del.bat

 
del \\PC%N\C$\Doc & set ......... raccourci à delete         ca marche manuellement avec un numero de pc
echo le PC %N a ete traité >> log.txt
 
C'est le rouge qui pose problème : le passage de paramètre semble ne pas marcher, et surtout le choix du test à effectuer pour voir si la machine distante est allumée
 
 
En vous remerciant


Message édité par LangueDeGeek le 18-06-2008 à 14:32:10
Reply

Marsh Posté le 18-06-2008 à 14:28:34   

Reply

Marsh Posté le 18-06-2008 à 14:29:49    

Quelle est la question au juste ?


Message édité par Elmoricq le 18-06-2008 à 14:30:19
Reply

Marsh Posté le 18-06-2008 à 14:32:59    

j'edit, je colore, j'améliore :D
 
Les problemes sont donc le passage en paramètre et le test à effectuer afin que le script ne glande pas 30sec si la machine distante n'est pas allumée

Reply

Marsh Posté le 18-06-2008 à 20:17:13    

Tu peux spécifier les délais de la commande PING, par exemple :
ping -n 1 -w 10 192.168.0.10
Il enverra qu'une seule requête avec un délai d'attente max de 10ms.
Je pense que le problème venait de là ?
 
J'ai pas tout compris parce que t'as peut être trop bien expliqué ^^
Donc s'il y a d'autre problème explique juste le problème simplement stp..

Reply

Marsh Posté le 19-06-2008 à 21:48:14    

Le probleme est dans le choix du test pour savoir si un pc est allumé
 
et le passage en parametre de %N semble ne pas marcher, est ce correcte le coup du Call XXX.bat %N  puis on réutilise alors tranquillement le %N dans le .bat cité ?

Reply

Marsh Posté le 20-06-2008 à 12:23:28    

"Le probleme est dans le choix du test pour savoir si un pc est allumé"
> j'viens de répondre a ce probleme ...
 
ping -n 1 -w 10 192.168.0.10
if errorlevel 1 echo pc éteind
 
Et pourquoi tu veux faire obligatoirement un 2ieme bat ? pourquoi ne pas tout mettre en un seul ?...

Reply

Marsh Posté le 20-06-2008 à 15:36:36    

pas faux, d'une part pour essayer le passage en paramere que j'avais jamais fait et à la base pour avoir un log complet en faisant un genre de call del.bat >> log.txt  mais il est vrai que ca sera lourd dans le log d'afficher tout.
 
Bon je test le ping if error ^^

Reply

Marsh Posté le 20-06-2008 à 15:44:10    

Je vais tester un truc dans ce style
 
For /L %%1 IN (1,1,100) Do (
 
ping -n 1 -w PC%%1
if errorlevel 1 goto next
 
del "\\pc%1\C$\......rac1
del "\\pc%1\C$\......rac2
echo fichier efface sur PC %1 >> log.txt
 
:next
)  
pause

Reply

Marsh Posté le 20-06-2008 à 15:53:35    

ca m'affiche la parenthèse xD
 
on dirait que le Goto fait sauter ma fin de boucle.... genre il test le ping le premier ping pas donc go to puis ) de fin de for et Boom planté.. je sais meme pas pourquoi il l'affiche.
 
Je vais tester avec un pc allumé
 
 
ha oui en effet le goto kill le for, je ne saivais pas, on va faire des If
 
donc un truc comme ca sans goto
 
For /L %%1 IN (1,1,100) Do (
 
ping -n 1 -w PC%%1
if not errorlevel 1 then (
 
del "\\pc%1\C$\......rac1
del "\\pc%1\C$\......rac2
echo fichier efface sur PC %1 >> log.txt
 
)
)
pause


Message édité par LangueDeGeek le 20-06-2008 à 16:01:40
Reply

Marsh Posté le 20-06-2008 à 18:35:21    

le goto :eof est fait pour quitter la boucle.
 
For /L %%1 IN (1,1,100) Do (
ping -n 1 -w PC%%1
if not errorlevel 0 goto :eof
del "\\pc%1\C$\......rac1
del "\\pc%1\C$\......rac2
echo fichier efface sur PC %1 >> log.txt
)
pause


Message édité par blastkiller le 20-06-2008 à 18:35:52
Reply

Marsh Posté le 20-06-2008 à 18:35:21   

Reply

Marsh Posté le 20-06-2008 à 19:22:48    

je ne suis plus au boulo donc je testerais lundi, mais juste une question sur le nombre de %, il en faut bien 2 pour la boucle for et ensuite un devant le nom de variable ? je suis tombé sur des scripts ou la variable est entrouré de %var%

Reply

Marsh Posté le 23-06-2008 à 14:34:40    

ping -n 1 -w PC%%1  
 
manque le temps en Ms d'ailleur apres le -w
 
 
 
la boucle semble marcher mais ca plante au bout de quelques PC, il y a peu être mieux qu'un test ping pour voir si la machine est allumé, j'ai vu un post ou on test un netstat pour monter une lettre du pc ciblé, on peut tester un netstat avec le IF NOT errorlevel 1 de la même manière je suppose


Message édité par LangueDeGeek le 23-06-2008 à 14:37:56
Reply

Sujets relatifs:

Leave a Replay

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