IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Soucis exécution commandes (ping) pour chaque lignes d'un fichier texte [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre éclairé Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Points : 809
    Points
    809
    Par défaut Soucis exécution commandes (ping) pour chaque lignes d'un fichier texte
    Bonjour,
    J'ai créé un script basic qui lis un fichier texte dans lequel se trouve le nom d'ordinateurs et mon script me retourne l'adresse IP correspondante.

    Malheureusement j'ai un soucis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off
    setlocal enabledelayedexpansion
    
    for /f "tokens=* delims= " %%a in (test.txt) do (
    	for /f "delims=[] tokens=2" %%b in ('ping %%a -n 1 -w 100 -4 -l 8 /a') do (
    	echo %%a - %%b
    	)
    )
    pause
    Ceci me retourne bien: "%host% - %ip%".
    Mais si je veux faire un SET ip=%%b puis echo %ip%, plus rien ne fonctionne...

    J'ai tenté énormément de choses mais j'ne suis arrivé à un point ou j'ai besoin d'assistance ^^

    Merci pour votre aide
    ________________________________________________________________
    N'oublie pas de faire une sauvegarde avant d'exécuter des scripts...
    Si j'ai ton problème, un petit fait toujours plaisir!
    ________________________________________________________________

  2. #2
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Salut,

    Un exemple de ton fichier texte, serait utile.

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  3. #3
    Membre éclairé Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Points : 809
    Points
    809
    Par défaut
    Ah désolé, euh rien de plus simple c'est:
    nompc1
    nompc2
    nompc3
    ...
    ________________________________________________________________
    N'oublie pas de faire une sauvegarde avant d'exécuter des scripts...
    Si j'ai ton problème, un petit fait toujours plaisir!
    ________________________________________________________________

  4. #4
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Ceçi doit fonctionner sans problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @echo off&cls
    
    setlocal EnableDelayedExpansion
    
    for /f "delims=" %%a in ('type test.txt') do (
    	for /f "delims=[] tokens=2" %%b in ('ping %%a -n 1 -w 100 -4 -l 8 /a') do (
    	set $Host=%%a
            set $IP=%%b
            echo !$Host! - !$IP!
    	)
    )
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  5. #5
    Membre éclairé Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Points : 809
    Points
    809
    Par défaut
    En effet ça fonctionne très bien!

    Merci à toi, ô grand maître du Batch xD
    ________________________________________________________________
    N'oublie pas de faire une sauvegarde avant d'exécuter des scripts...
    Si j'ai ton problème, un petit fait toujours plaisir!
    ________________________________________________________________

  6. #6
    Membre éclairé Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Points : 809
    Points
    809
    Par défaut
    Une dernière petite chose, dans ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    @echo off&cls
    setlocal EnableDelayedExpansion
    
    for /f "delims=" %%a in ('type test.txt') do (
    	set /a N+=1
    	set v!N!=%%a
    
    	for /f "delims=[] tokens=2" %%b in ('ping %%a -n 1 -w 100 -4 -l 8 /a') do (
    		set $Host=%%a
    		set $IP=%%b
    		if not errorlevel 1 (
    			echo !N!: !$Host! - !$IP!
    		)
    		if errorlevel 1 (
    			echo !N!: !$Host! - ETEIND
    		)
    	)
    )
    pause
    Comment faire pour que "errorlevel" (ou une méthode pour vérifier que le ping de la machine répond bien) fonctionne?

    J'ai modifié pour cet exemple "monpc2" en "monpc22" (qui n'existe pas) pour avoir un message du style "monPC22 est eteind".

    Désolé pour le multi requests
    ________________________________________________________________
    N'oublie pas de faire une sauvegarde avant d'exécuter des scripts...
    Si j'ai ton problème, un petit fait toujours plaisir!
    ________________________________________________________________

  7. #7
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Essaye comme ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    @echo off&cls
    setlocal EnableDelayedExpansion
    
    for /f "delims=" %%a in ('type test.txt') do (
    	set /a N+=1
    	set v!N!=%%a
    
    	for /f "delims=[] tokens=2" %%b in ('ping %%a -n 1 -w 100 -4 -l 8 /a') do (
    		set $Host=%%a
    		set $IP=%%b
    		if %errorlevel% equ 0 (
    			echo !N!: !$Host! - !$IP!
    		) else (
    			echo !N!: !$Host! - ETEIND
    		)
    	)
    )
    pause
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  8. #8
    Membre éclairé Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Points : 809
    Points
    809
    Par défaut
    Ca me retourne juste:
    monpc1
    monpc3
    ...
    Ce que je voudrais (je le redis pour éviter la confusion ^^):
    monpc1
    monpc2- ETEIND
    monpc3
    ...
    Je sais que si mon ping ne se trouve pas dans un for ... in(), errorlevel fonctionne mais si je fais ça, je ne peux pas faire mon ping pour chaques lignes de mon fichier .txt
    ________________________________________________________________
    N'oublie pas de faire une sauvegarde avant d'exécuter des scripts...
    Si j'ai ton problème, un petit fait toujours plaisir!
    ________________________________________________________________

  9. #9
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    OK, j'ai compris ton problème en fait il n'entre pas dans la boucle, donc le test if n'est pas executé (il est donc inutil).

    Tu peux setter $host à une valeur bidon (rien) et en sortie de boucle tu test cette valeur. Si elle est toujours à rien en sortie de boucle alors tu affiche éteind

    EDIT :

    Ou plus propre, on annule $host et on test si elle existe en sortie de boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @echo off&cls
    setlocal EnableDelayedExpansion
    
    for /f "delims=" %%a in ('type sacha.txt') do (
    	set /a N+=1
    	set v!N!=%%a
            set $Host=
    	for /f "delims=[] tokens=2" %%b in ('ping %%a -n 1 -w 100 -4 -l 8 /a') do (
    		set $Host=%%a
    		set $IP=%%b
    		echo !N!: !$Host! - !$IP!)
    if not defined $host echo %%a eteind)
    Voilà l'idée
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  10. #10
    Membre éclairé Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Points : 809
    Points
    809
    Par défaut
    Ah ouais c'est malin d'éditer la valeur ^^
    Je testerais demain (au travail).
    En tout cas merci à toi


    EDIT:
    @sachadee: Un très grand merci à toi!
    Ça fonctionne super bien ^^
    ________________________________________________________________
    N'oublie pas de faire une sauvegarde avant d'exécuter des scripts...
    Si j'ai ton problème, un petit fait toujours plaisir!
    ________________________________________________________________

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD19] Créer un état pour chaque ligne d'un fichier de données
    Par Térence01 dans le forum WinDev
    Réponses: 6
    Dernier message: 28/05/2014, 10h05
  2. Concaténation d'un champ supplémentaire pour chaque ligne d'un fichier
    Par saladin443 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 27/05/2013, 12h49
  3. [Batch] Créer et utiliser 2 variables pour chaque ligne d'un fichier
    Par Marc_L dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 02/12/2011, 00h22
  4. Réponses: 5
    Dernier message: 28/10/2011, 12h17
  5. [XL-2003] exécuter une macro pour chaque ligne.
    Par visto94 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/07/2010, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo