[BATCH] problème avec un programme de ping

Fermé
christboy Messages postés 157 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 30 juillet 2008 - 1 juin 2007 à 16:09
 pcv_only/ - 4 juin 2007 à 16:54
bonjour,
en farfouillant sur le net j'ai reussi a faire ce fichier batch (voir ci-dessous) mais un fichier temporaire est creer et j'aimerai éviter cela car un fichier qui ne sert que lorsque l'application tourne n'est pas très utile.
ECHO OFF
cls
REM *********************************************************
REM **  Test de ping sur une liste de machines            ***
REM **            					  ***
REM *********************************************************


set /p nombre_reseau_to_scan="saisissez le nombre de r‚seau(x) … scanner :"

REM **************************************************
REM *** Création du nom des fichier de destination ***
REM **************************************************
set heure=%time:~0,8%
set fichier_temporaire="temp.txt"
set nom_fichier_ok="reponses_ok  [%date:/=-%] [%heure::=.%].txt"
set nom_fichier_no="reponses_no  [%date:/=-%] [%heure::=.%].txt"
REM **************************************************
REM *** initialisation des variables               ***
REM **************************************************
set /a nombre_reponses_ok=0
set /a nombre_reponses_no=0
set /a nb_to_ping=0

REM *************************************
REM *** Création du fichier d'adresse ***
REM *************************************

echo.> %fichier_temporaire%
:MASTER
echo saisir l'adresse r‚seau (ex:192.168.0.0): 
echo (limite au r‚seau XXX.XXX.XXX.9)
set /p debut_addr=?
set debut_addr=%debut_addr:~0,-2%
set fin_addr=255
set /a compteur_addr=1
echo Cr‚ation du fichier temporaire ...
:Boucle
echo %debut_addr%.%compteur_addr% >> %fichier_temporaire%
set /a compteur_addr=compteur_addr+1
set /a nb_to_ping=nb_to_ping+1
IF not %compteur_addr%==%fin_addr% GOTO BOUCLE
set /a nombre_reseau_to_scan=nombre_reseau_to_scan-1
IF not %nombre_reseau_to_scan%==0 GOTO MASTER

REM ***********************************************
REM *** Initialisation des fichiers de stockage ***
REM ***********************************************
echo ********************************************** >> %nom_fichier_ok%
echo **                                         *** >> %nom_fichier_ok%
echo **  Fichier de réponses positives au ping  *** >> %nom_fichier_ok%
echo **                                         *** >> %nom_fichier_ok%
echo ********************************************** >> %nom_fichier_ok%
echo. >> %nom_fichier_ok%
echo *********** D‚but des pings *********** >> %nom_fichier_ok%
echo ********************************************** >> %nom_fichier_no%
echo **                                         *** >> %nom_fichier_no%
echo **  Fichier de réponses positives au ping  *** >> %nom_fichier_no%
echo **                                         *** >> %nom_fichier_no%
echo ********************************************** >> %nom_fichier_no%
echo. >> %nom_fichier_no%
echo *********** D‚but des pings *********** >> %nom_fichier_no%


REM ****************************************************************
REM *** Lecture du nom des machines dans le %fichier_temporaire% ***
REM ****************************************************************
ECHO *********** D‚but des pings ***********
FOR /F %%i IN (temp.txt) Do call :INSTALLATION %%i
ECHO ************ Fin des pings ************

REM ******************************************************************
REM *** Ecriture des statistiques dans les fichiers de destination ***
REM ******************************************************************
echo.
set /a nombre_reponses=nombre_reponses_ok+nombre_reponses_no
echo *** %nombre_reponses% reponse sur un total de %nb_to_ping% adresses
echo *** %nombre_reponses_ok% reponses positives
echo *** %nombre_reponses_no% reponses negatives
DEL /F /Q %fichier_temporaire%
echo. >> %nom_fichier_ok%
echo. >> %nom_fichier_no%
ECHO ************ Fin des pings ************ >> %nom_fichier_ok%
ECHO ************ Fin des pings ************ >> %nom_fichier_no%
echo *** %nombre_reponses% réponse sur un total de %nb_to_ping% adresses >> %nom_fichier_ok%
echo *** %nombre_reponses% réponse sur un total de %nb_to_ping% adresses >> %nom_fichier_no%
echo *** %nombre_reponses_ok% réponses positives >> %nom_fichier_ok%
echo *** %nombre_reponses_no% réponses negatives >> %nom_fichier_no%

REM **************************************************************
REM *** Mise en place des attribut des fichiers de destiantion ***
REM **************************************************************
ATTRIB +R %nom_fichier_ok% 
ATTRIB +R %nom_fichier_no%

PAUSE
GOTO FIN

REM ******************************
REM *** Procedure INSTALLATION ***
REM ******************************
:INSTALLATION
SET Machine=%1
SET Compteur=0

REM *************************************
REM *** Execution de la commande ping ***
REM *************************************
FOR /F  "tokens=1" %%i IN ('ping  %Machine% -n 1') DO call :TestPing %%i
GOTO TestPingSuite

REM Teste si les mot Réponse et Hôte sont contenu dans les lignes générées par la commande ping comme premier mot.
REM Si oui, alors on incremente le compteur Compteur
:TestPing
set ChainePing=%1
IF %ChainePing%Chaine==D‚laiChaine set /a Compteur=%Compteur%+1 
IF %ChainePing%Chaine==H“teChaine set /a Compteur=%Compteur%+1
GOTO FIN

REM A la fin du for /F on entre dans ce test. Si le compteur est toujours à 0 c'est qu aucune 
REM ligne générée par le ping ne contenait les mots Hôte et Délai comme premier mot.
:TestPingSuite
if %Compteur%==0 GOTO PingOK
GOTO NoPing

REM ************************
REM *** Procedure NoPing ***
REM ************************
:NoPing
REM ****** Il y a eu un probleme sur le ping de la machine %Machine
set /a nombre_reponses_no=nombre_reponses_no+1
ECHO *** Ping ERROR sur %Machine% 
ECHO *** Ping ERROR sur %Machine% >> %nom_fichier_no%
GOTO FIN

REM ************************
REM *** Procedure PingOK ***
REM ************************
:PingOK
REM ****** PingOK sur la machine %Machine%
set /a nombre_reponses_ok=nombre_reponses_ok+1
ECHO *** Ping   OK  sur %Machine%
ECHO *** Ping   OK  sur %Machine% >> %nom_fichier_ok%
GOTO FIN


:FIN

A voir également:

6 réponses

Les fichiers temporaires c'est pas grave, tu as qu'a le supprimer à la fin de ton batch
0
christboy Messages postés 157 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 30 juillet 2008 20
1 juin 2007 à 16:28
oui mais le fichier est supprimé a la fin mais j'aimerai ne plus avir de fichier temporaire du tout ^^.

En fait je programme en C++ d'habitude j'aurais aimé savoir si en batch il existait des tableau ou quelque chose qui y ressemble car sa supprimerai ce fichier.

Mais merci de ta reponse quand meme.
0
Salut

Non, pas de tableau en ligne de commande. Uniquement des variables "int" ou "String" via la commande SET. Aussi en batch tout est séquentiel. Tu peux éviter l'écriture du fichier temporaire, mais il faut complètement repenser ton fichier. Tu peux aussi en profiter pour le simplifier.

by pcv_only/
0
christboy Messages postés 157 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 30 juillet 2008 20
4 juin 2007 à 15:45
En fait, j'avais pris un fichier temporaire car je voulais que l'utilisateur entre toutes les infos au debut du programme et puisse le laisser faire seul ensuite. Donc le fichier temporaire pouvait stocker les adresses a pinger. Si je fais comme tu me conseil (càd de facon sequentielle pour chaque réseau) l'utilisateur serait obliger d'intervenir en cours de route, hors c'est ce que je veux eviter.

Mais bon comme apparament il n'y a rien pour stocker un ensemble de variable en batch, j'ai pas le choix : fichier temporaire ^^'
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dans ce cas il faut faire un fichier d'initialisation et non pas un fichier temporaire...
0
En plus, comme ton batch semble concerner des machines du réseau LAN, tu n'as besoin ni de l'un ni de l'autre...
0