Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 2
Aller à la page: 1, 2  >
[R] ca ne Ping pas fort
Auteur Message
Répondre en citant
Message [R] ca ne Ping pas fort 
Bonjour,

Je souhaite mettre à jour un fichier sur un parc de machines et conserver un log pour savoir si cela à bien été fait.
Voici mon problème : dans la boucle FOR ci dessous la commande Ping ne semble pas s’exécuter. Que la station soit éteinte ou allumée le Log n'inscrit que la date du jour.
Lors de l’exécution, sur la ligne je vois (ping nom_de_la station.
En ligne de commande ça fonctionne. Le %errorlevel% est bon.
Faut-il changer de méthode (enabledelayexpansion ) ?
Merci de vos réponses.

Code:

rem @echo off
rem définition du fichier ou sera enregistré les logs
set log=C:\util\licxp.log

Rem liste des postes
set w7=C:\util\ac27.txt

rem source du fichier lic
SET _source=C:\util
SET _destw7=C$\ProgramData\SolidWorks

rem on inscrit la date dans le log
ECHO.|DATE >> %log%

for /f %%i in (%w7%) do (
ping -n 1 %%i|find "TTL=128" && robocopy %_source%  \\%%i\%_destw7%  SolidWorksStandaloneLic.lic  /LOG+:%log%
)




Dernière édition par Felix le Lun 19 Déc 2016 - 10:09; édité 1 fois

______________________________________________________
"La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." N.Mandela
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message Re: ca ne Ping pas fort 
Felix a écrit:
Bonjour,

Je souhaite mettre à jour un fichier sur un parc de machines et conserver un log pour savoir si cela à bien été fait.
Voici mon problème : dans la boucle FOR ci dessous la commande Ping ne semble pas s’exécuter. Que la station soit éteinte ou allumée le Log n'inscrit que la date du jour.
Lors de l’exécution, sur la ligne je vois (ping nom_de_la station.
En ligne de commande ça fonctionne. Le %errorlevel% est bon.
Faut-il changer de méthode (enabledelayexpansion ) ?
Merci de vos réponses.

Code:

rem @echo off
rem définition du fichier ou sera enregistré les logs
set log=C:\util\licxp.log

Rem liste des postes
set w7=C:\util\ac27.txt

rem source du fichier lic
SET _source=C:\util
SET _destw7=C$\ProgramData\SolidWorks

rem on inscrit la date dans le log
ECHO.|DATE >> %log%

for /f %%i in (%w7%) do (
ping -n 1 %%i|find "TTL=128" && robocopy %_source%  \\%%i\%_destw7%  SolidWorksStandaloneLic.lic  /LOG+:%log%
)


Salut Wink

Essaye ce code, dis moi si ça fonctionne Okay :
Code:

@echo off

rem définition du fichier ou sera enregistré les logs
set log=C:\util\licxp.log

Rem liste des postes
set w7=C:\util\ac27.txt

rem source du fichier lic
SET _source=C:\util
SET _destw7=C$\ProgramData\SolidWorks

rem on inscrit la date dans le log
(%DATE%)>> %log%

for /f %%i in (%w7%) do (

   (ping -n 1 %%i)>NUL|find /I "TTL=128"&&(
   robocopy "%_source%"  "\\%%i\%_destw7%"  "SolidWorksStandaloneLic.lic"  "/LOG+:%log%")
)


@ ++ Okay Wink




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [R] ca ne Ping pas fort 
ça ping plus fort maintenant ? Mr. Green

Si oui, n'oublie pas d'éditer ton premier message du topic en ajoutant [R] au début ! Okay

@ ++ Wink




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [R] ca ne Ping pas fort 
Cela ne fonctionne pas mieux : pas de copies du tout... Les boucles FOR ont l'air susceptibles en batch. Do normalement n'accepte qu'une seule commande non ? or ici j'ai un ping, find et robocopy...
J'ai également fait un essai avec un setdelayexpansion et l'utilisation d'une variable !poste! : même type d'échec.

Pour l'instant ce qui fonctionne le mieux c'est çà :

Code:

SET _destw7=C$\ProgramData\SolidWorks
set log=C:\util\licxp.log
ping station -n 2 | FIND "TTL=128">NUL
rem if %errorlevel%==0 robocopy "c:\util"  \\station\%_destw7%  SolidWorksStandaloneLic.lic /R:1 /W:1 "/LOG+:"%log%"
if %errorlevel%==0 robocopy %_source%  \\station\%_destw7%  SolidWorksStandaloneLic.lic /R:1 /W:1 "/LOG+:%log%"


Mais la perspective d'écrire des lignes de code pour chacune des stations ne m’emballe pas... Rolling Eyes




______________________________________________________
"La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." N.Mandela
Répondre en citant
Message [R] ca ne Ping pas fort 
Felix a écrit:
Cela ne fonctionne pas mieux : pas de copies du tout... Les boucles FOR ont l'air susceptibles en batch. Do normalement n'accepte qu'une seule commande non ? or ici j'ai un ping, find et robocopy...
J'ai également fait un essai avec un setdelayexpansion et l'utilisation d'une variable !poste! : même type d'échec.

Pour l'instant ce qui fonctionne le mieux c'est çà :

Code:

SET _destw7=C$\ProgramData\SolidWorks
set log=C:\util\licxp.log
ping station -n 2 | FIND "TTL=128">NUL
rem if %errorlevel%==0 robocopy "c:\util"  \\station\%_destw7%  SolidWorksStandaloneLic.lic /R:1 /W:1 "/LOG+:"%log%"
if %errorlevel%==0 robocopy %_source%  \\station\%_destw7%  SolidWorksStandaloneLic.lic /R:1 /W:1 "/LOG+:%log%"


Mais la perspective d'écrire des lignes de code pour chacune des stations ne m’emballe pas... Rolling Eyes


Juste une question, pourquoi utiliser robocopy ? Pour ta question, Do peut accepter plusieurs commandes avec des parenthèses ou des &

Essaie ce code :
Code:

@echo off
setlocal ENABLEDELAYEDEXPANSION
rem définition du fichier ou sera enregistré les logs
set log=C:\util\licxp.log
 
Rem liste des postes
set w7=C:\util\ac27.txt
 
rem source du fichier lic
SET _source=C:\util
SET _destw7=C$\ProgramData\SolidWorks
 
rem on inscrit la date dans le log
(echo;%DATE%)>> %log%
 
for /f %%i in ('type "%w7%"') do (
   ping -n 1 %%i|find /I "TTL=128"&&robocopy "%_source%"  "\\%%i\%_destw7%"  "SolidWorksStandaloneLic.lic" /R:1 /W:1  "/LOG+:%log%"
)


Si ça fonctionne toujours moi, préviens moi je te ferais un système de log "home made" qui fonctionnera forcément Okay

@ ++ Okay Wink



Dernière édition par Xenoxis le Lun 12 Déc 2016 - 19:33; édité 1 fois

______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [R] ca ne Ping pas fort 
Est-ce que ça convient ça ? :
Code:
rem @echo off
rem définition du fichier ou sera enregistré les logs
set log=C:\util\licxp.log
 
Rem liste des postes
set w7=C:\util\ac27.txt
 
rem source du fichier lic
SET _source=C:\util
SET _destw7=C$\ProgramData\SolidWorks
 
rem on inscrit la date dans le log
echo %date% >> %log%
 
for /f "tokens=*" %%i in (%w7%) do (
   2>&1 >nul ping -n 1 %%i | find "TTL=" && (
      robocopy %_source%  \\%%i\%_destw7%  SolidWorksStandaloneLic.lic  /LOG+:%log%
   )
)





______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [R] ca ne Ping pas fort 
Merci pour ta réponse, je te répondrai demain soir.
Pourquoi robocopy ? commande plus récente qui me semble plus à l'aise avec les réseaux, bien documentée ... et je suis dans la catégorie débutant.



Dernière édition par Felix le Lun 19 Déc 2016 - 10:13; édité 1 fois

______________________________________________________
"La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." N.Mandela
Répondre en citant
Message [R] ca ne Ping pas fort 
Aucune des propositions ne fonctionne. Sad même bilan.

Contexte de l'essai : 3 machines seulement, une station est délibérément éteinte lors du test, les 2 autres allumées.

Xenosis : J'obtiens : '13' n'est pas reconnu en tant que cmd interne. (cela viens de la date)
Réponse de IP ... temps>1ms TTL=128. Rien dans le log.

Tsnake41 : toutes les stations sont bien reconnues dans la boucle (nom correct). Rien dans le log sauf la date. Je suis obligé de faire un ctrl C pour arrêter le script (robocopy dans le vide probablement).

J'ai remplacé robocopy par echo bon : j'ai 3 fois "bon" ! (mais quel menteur ce PC !)...



Dernière édition par Felix le Lun 19 Déc 2016 - 10:13; édité 1 fois

______________________________________________________
"La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." N.Mandela
Répondre en citant
Message [R] ca ne Ping pas fort 
Felix a écrit:
Aucune des propositions ne fonctionne. Sad même bilan.

Contexte de l'essai : 3 machines seulement, une station est délibérément éteinte lors du test, les 2 autres allumées.

Xenosis : J'obtiens : '13' n'est pas reconnu en tant que cmd interne. (cela viens de la date)
Réponse de IP ... temps>1ms TTL=128. Rien dans le log.

Tsnake41 : toutes les stations sont bien reconnues dans la boucle (nom correct). Rien dans le log sauf la date. Je suis obligé de faire un ctrl C pour arrêter le script (robocopy dans le vide probablement).

J'ai remplacé robocopy par echo bon : j'ai 3 fois bons ! (mais quel menteur ce PC !)...


j'ai fait un code qui est plus "sûr" (gestion des erreurs en gros) :

Code:

@echo off
setlocal ENABLEDELAYEDEXPANSION

set log=C:\util\licxp.log
set w7=C:\util\ac27.txt
SET _source=C:\util
set _destw7=C$\ProgramData\SolidWorks

echo;ParamŠtres :
echo;ÄÄÄÄÄÄÄÄÄÄÄÄÄ
echo;
for %%A in ("log" "w7" "_source" "_destw7") do (
   if exist "!%%A!" (echo;%%A = !%%A! - Existe = oui) else (
      echo;%%A = !%%A! - Existe = non ^(peut g‚ner‚ des erreurs^)
      )
)

(
echo;
echo;%DATE%)>> %log%
 
for /f %%i in (%w7%) do (
   rem Suppression du FIND pour trouver si il y a un résultat, je pense que tu voulais
   rem simplement vérifier si la machine est allumée, donc && suffit ^^
   ping -n 1 %%i&&(robocopy "%_source%"  "\\%%i\%_destw7%"  "SolidWorksStandaloneLic.lic" /R:1 /W:1  "/LOG+:%log%")
   if exist "\\%%i\%_destw7%\SolidWorksStandaloneLic.lic" (echo;Copie effectu‚e) else (
      echo;Erreur num‚ro !errorlevel! lors de la copie de %_source%\SolidWorksStandaloneLic.lic vers \\%%i\%_destw7%
      )
)
pause>NUL


Partage moi le résultat Okay Wink




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [R] ca ne Ping pas fort 
Merci pour ton aide Xenosis, je vais essayer dès que je pourrais.

Sinon je crois que j'ai une piste... j'ai essayé ce code "à l'arrache"
Code:

for /F %%i IN (%w7%) DO (
PING -n 2 -w 4 %%i | FIND "TTL=">NUL
IF NOT ERRORLEVEL 1 goto ok
Echo non)

:ok
echo oui)

:fin
pause


ça avait l'air de marcher, ce qui m'a surpris avec les trois parenthèses pour le DO... mais je n'ai pas eu le temps de continuer.
a+




______________________________________________________
"La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." N.Mandela
Répondre en citant
Message [R] ca ne Ping pas fort 
Felix a écrit:
Merci pour ton aide Xenosis, je vais essayer dès que je pourrais.

Sinon je crois que j'ai une piste... j'ai essayé ce code "à l'arrache"
Code:



for /F %%i IN (%w7%) DO (
PING -n 2 -w 4 %%i | FIND "TTL=">NUL
IF NOT ERRORLEVEL 1 goto ok
Echo non)

:ok
echo oui)

:fin
pause



ça avait l'air de marcher, ce qui m'a surpris avec les trois parenthèses pour le DO... mais je n'ai pas eu le temps de continuer.
a+



Désolé mais ton code est faux :/
Si il y a un goto dans ton ta boucle FOR, celui-ci quitte la boucle FOR (d'autant que il y a un problème niveau des parenthèses de la boucle ...)

Voici ton code corrigé :
Code:

setlocal ENABLEDELAYEDEXPANSION
for /F %%i IN (%w7%) DO (
(PING -n 2 -w 4 %%i | FIND "TTL=">NUL)
if !Errorlevel! EQU 0 (
     echo;%%i trouve) else echo;%%i non trouve
)
pause


Okay




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [R] ca ne Ping pas fort 
Tu as tout à fait raison pour les labels dans la boucle : j'avais fait un peu vite.

Ton code précédent fonctionne dans les grandes lignes. Quelques problèmes cependant :
1) la boucle ci dessous affiche systématiquement Existe non
Code:
if exist "!%%A!" (echo;%%A = !%%A! - Existe = oui) else (
          echo;%%A = !%%A! - Existe = non ^(peut generer‚ des erreurs^)


2) ce test :
Code:
if exist "\\%%i\%_destw7%\SolidWorksStandaloneLic.lic" (echo;Copie effectue) else (

est à revoir car il s'agit d'une mise à jour, donc le fichier existe déjà.

3)Si la station est éteinte :
à l'écran : Erreur 16 voir image

Le log :
ERREUR 53 (0x00000035) AccŠs au r‚pertoire de destination...Le chemin r‚seau n'a pas ‚t‚ trouv‚.
Attente de 1 secondes... Nouvel essai...ERREUR : NOMBRE DE TENTATIVES ATTEINT.

Donc le programme essaye de copier quand même, du coup c'est très lent et il n'y avait que 3 machines à tester !




______________________________________________________
"La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." N.Mandela
Répondre en citant
Message [R] ca ne Ping pas fort 
Quelques problème avec l'image semble t-il.

On voit que c'est le contrôleur de domaine qui répond à la place de la station du coup
paquets envoyés= paquets reçus perte 0% ce qui explique pourquoi le programme essaye de copier.




______________________________________________________
"La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." N.Mandela
Répondre en citant
Message [R] ca ne Ping pas fort 
Voilà le code corrigé :
Code:

@echo off
setlocal ENABLEDELAYEDEXPANSION
 
set log=C:\util\licxp.log
set w7=C:\util\ac27.txt
SET _source=C:\util
set _destw7=C$\ProgramData\SolidWorks
 
echo;Parametres :
echo;ÄÄÄÄÄÄÄÄÄÄÄÄÄ
echo;
for %%A in ("log" "w7" "_source" "_destw7") do (
   if exist "!%%~A!" (echo;%%~A = !%%~A! - Existe = oui) else (
      echo;%%~A = !%%~A! - Existe = non ^(peut g‚ner‚ des erreurs^)
      )
)
 
(
echo;
echo;%DATE%)>> %log%
 
for /f %%i in (%w7%) do (
  rem Suppression du FIND pour trouver si il y a un résultat, je pense que tu voulais
  rem simplement vérifier si la machine est allumée, donc && suffit ^^
   ping -n 1 %%i&&(robocopy "%_source%"  "\\%%i\%_destw7%"  "SolidWorksStandaloneLic.lic" /R:1 /W:1  "/LOG+:%log%")
   if "!errorlevel!" EQU "0" (echo;Copie effectu‚e) else (
      echo;Erreur num‚ro !errorlevel! lors de la copie de %_source%\SolidWorksStandaloneLic.lic vers \\%%i\%_destw7%
      )
)
pause>NUL


Apparemment le chemin d'accès réseau est faut, est-tu sûr qu'il existe ? Qu'il n'y a pas une faute ?

Je ne vois que cette explication, ou bien une mauvaise utilisation de la commande robocopy mais j'ai déjà vérifier et c'est correct !

@ ++ Okay Wink




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [R] ca ne Ping pas fort 
Code:
R


Maintenant, cela fonctionne parfaitement !

Pour tenir compte de la réponse du contrôleur de domaine j'ai modifié la ligne ci dessous :
Code:
for /f %%i in (%w7%) do (
   ping -n 1 %%i|find /I "Impossible" &&(echo Echec de la copie de %%i>> %log%)||(robocopy "%_source%"  "\\%%i\%_destw7%"  "SolidWorksStandaloneLic.lic" /R:1 /W:1  "/LOG+:%log%")


Le code s'exécute rapidement. Je vais pourvoir utiliser cette boucle pour d'autres...aventures.. Laughing

Encore merci pour ton aide Xenosis Okay (sans oublier tsnake41)

Félix Lechat.




______________________________________________________
"La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." N.Mandela
Message [R] ca ne Ping pas fort 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 2
Aller à la page: 1, 2  >
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch