[Batch] Eteindre les pc de mon reseau a partir d'un fichier texte

Eteindre les pc de mon reseau a partir d'un fichier texte [Batch] - Shell/Batch - Programmation

Marsh Posté le 28-08-2015 à 15:30:53    

Salut,  
 
Je voudrai à partir d'un batch arrêter les pc de mon réseau.
J'ai une liste de postes qui se trouvent dans un fichier TXT :
 
Exemple du Contenu du fichier TXT "A_eteindre.txt"
SEZ0LL00  
SEZ0LL01    
SEZ0LL02    
SEZ0LL03    
SEZ0LL04    
SEZ0LL05    
SEZ0LL06    
SEZ0LL07
 
Je veux aussi supprimer les blancs et les tabulations en fin de ligne sur chaque ligne qui contient le nom du poste avant de lancer la commande shutdown :
 

Code :
  1. @echo off
  2. set compt=0
  3. for /f "delims=" %%i in ('type A_eteindre.txt') do (
  4. set /a compt+=1
  5. rem recuperation du nom du poste
  6. set VrLgn=%%i
  7. rem suppression des tabulations de fin de ligne
  8. set chaine2=%VrLgn: =% 
  9.  
  10. rem suppression des blancs de fin de ligne
  11. set chaine2=%chaine2: =%
  12. echo Arret du Poste No %compt% _%chaine2%_
  13. echo shutdown /s /m \\%chaine2% /t 0 /f /d p:4:1
  14. %windir%\system32\Shutdown.exe /s /m \\%chaine2% /t 0 /f /d p:4:1
  15. )


 
Mais ça ne marche pas, on dirait qu'il balaye le fichier autant qu'il y a de ligne dedans, mais il m'affiche toujours le dernier de la liste :
 
Arret du Poste No 0 _SEZ0LL07_
shutdown /s /m \\SEZ0LL07 /t 0 /f /d p:4:1
Arret du Poste No 0 _SEZ0LL07_
shutdown /s /m \\SEZ0LL07 /t 0 /f /d p:4:1
Arret du Poste No 0 _SEZ0LL07_
shutdown /s /m \\SEZ0LL07 /t 0 /f /d p:4:1
....
 
Je ne pige pas.. Pouvez-vous m'aider ?


Message édité par pierre059 le 28-08-2015 à 15:41:09
Reply

Marsh Posté le 28-08-2015 à 15:30:53   

Reply

Marsh Posté le 28-08-2015 à 19:08:05    

Déjà le comptage tout seul ne fonctionne pas, genre

Code :
  1. set compt=0
  2. for /f "delims=" %%i in ('type A_eteindre.txt') do (
  3. set /a compt+=1
  4. echo %compt%
  5. )
 

Tu est obligé de faire ça en batch? Avec du Perl ou autre c'est bien plus facile...

 

(Y'avait vraiment des gens qui maîtrisaient cette cochonnerie de batch à l'époque DOS??)


Message édité par rat de combat le 28-08-2015 à 19:08:39
Reply

Marsh Posté le 28-08-2015 à 19:18:44    

Code :
  1. @echo off
  2. setlocal enableextensions enabledelayedexpansion
  3. SET compt=0
  4. for /f "delims=" %%i in ('type A_eteindre.txt') do (
  5.   set /A compt=compt+1
  6.   set VrLgn=%%i
  7.   set chaine2=!VrLgn: =!
  8.   set chaine2=!chaine2: =!
  9.   echo Arret du Poste No !compt! _!chaine2!_
  10. )
  11. endlocal


Par contre ça enlève toutes les espaces, mais je suppose qu'il y en a pas dans les noms des postes.
edit: Et ça n'enlève pas les tab. Faut que je regarde set /?.
edit2: Bof, je laisse tomber pour les tab, autant les eviter dans le fichier.


Message édité par rat de combat le 28-08-2015 à 19:29:33
Reply

Marsh Posté le 28-08-2015 à 21:05:42    

Ah bah, merci, je suppose qu'il doit y avoir un bug dans mon script. Ou que c'est plutot la syntaxe années 90 qui bug.
Je connaissais pas ces syntaxes en .BAT. Surement du batch nouvelle génération. Moi, je suis resté aux années 90.. et oui, aux années DOS.
C'est presque pareil, mais ça marche.   :bounce:  Bizarre.
 
PS : pour supprimer les TAB, il suffit de mettre le caractère TAB (appuyer sur la touche TAB) à la place du _TAB_ :
 
set chaine2=!chaine2:_TAB_=!

Message cité 1 fois
Message édité par pierre059 le 28-08-2015 à 21:12:39
Reply

Marsh Posté le 31-08-2015 à 16:19:23    

pierre059 a écrit :


PS : pour supprimer les TAB, il suffit de mettre le caractère TAB (appuyer sur la touche TAB) à la place du _TAB_ :
set chaine2=!chaine2:_TAB_=!


Ah ouais, j'aurais pu deviner... :o

Reply

Marsh Posté le 31-08-2015 à 21:43:01    

ça me fait mal au coeur de lire du batch en 2015 alors qu'en powershell c'est une ligne :(
gc monfichier |% { shutdown /s /m `\`\$_ /f /d p:4:1 } (pas testé)

Reply

Sujets relatifs:

Leave a Replay

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