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 :

Comprendre des commandes DOS [Batch]


Sujet :

Scripts/Batch

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 41
    Points : 35
    Points
    35
    Par défaut Comprendre des commandes DOS
    Bonjour,

    Par nécessité, je me mets au DOS et l'écriture de batchs. J'arrive en partie à faire ce que je veux, mais j'ai une question sur deux lignes de commande que j'ai adaptées.

    Les voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for /f "delims=" %%i in ('type %MonFichier% ^|findstr /i /r "59M1"') do echo %%i >> %MonFichier%_59M
    
    type  %MonFichier% | find /v "59M1" > %MonFichier%_ss59M
    D'après ce que je comprends, ces deux lignes font la même chose : elles récupèrent des lignes spécifiques dans un fichier pour les mettre dans un autre.

    J'aimerai comprendre la différence entre ces deux lignes : est-ce qu'il peut y avoir des effets inattendus dans un cas et pas dans l'autre, des pb de perf, des limitations, etc.

    Si vous avez des sites sur le sujets abordable par des débutants, je suis preneur !

    Merci d'avance pour vos éclairages,

    Phi

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    la première ligne de code permet d’accéder à la ligne courante du fichier en cours de lecture, alors que la seconde l'émet directement dans le pipeline (cf. |).
    Pour les site tu devrais trouver qq liens dans les "post-it" de ce forum.

  3. #3
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salut,

    Citation Envoyé par Philomelo Voir le message
    D'après ce que je comprends, ces deux lignes font la même chose
    Non

    la premiere ligne matches toutes les lignes contenant les caractères "5" "9" "M" et "1" . La seconde ligne matches toues les lignes NE contenant PAS la chaine "59M1"

    mais si tes deux lignes etaient de cette forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for /f "delims=" %%i in ('type %MonFichier% ^|findstr /i /r "59M1"') do echo %%i >> %MonFichier%_59M
    
    type  %MonFichier% | find "59M1" > %MonFichier%_ss59M
    alors on peux dire qu'il y a beaucoup de differences, on va citer quelques-unes:

    * la ligne avec la boucle FORINDO va supprimer toutes les lignes vides de ton fichier la seconde NON
    * le caractère de redirection >> dans la premiere ligne va rendre le traitement plus long il vaux mieux le changer par un >
    * find et findstr chaqu'une de ces deux commandes à ces points fort et ses points faible:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off
    REM avantage de la commande FIND
    setlocal enabledelayedexpansion
    for /l  %%a in (',1 0X3E8') do set #=!#!#
    echo       FIND
    echo(!#!|find "!#!"
    echo       FINDSTR
    echo(!#!|findstr "!#!"
    pause

    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
    @echo off
    REM avantage de la commande FINDSTR
    setlocal enabledelayedexpansion
    for /l  %%# in (1 1 8181) do set #=!#!X
    echo(!#!#>file.txt
    echo     FIND
    type file.txt | find "X#"
    echo(
    echo     FINDSTR
    type file.txt | findstr "X#"
    
    del file.txt
    
    endlocal

    * L'utilisation du commutateur /i avec FINDSTR va te permettre de matcher 59M1 et 59m1 par contre la commande avec FIND va te permettre de matcher uniquement la chaine 59M1

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 41
    Points : 35
    Points
    35
    Par défaut Super !
    Merci à vous deux pour ces réponses.

    C'est plutôt technique, mais c'est ce que je voulais

    Cela promet de belles recherches

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

Discussions similaires

  1. executer des commandes DOS à partir un fichier *.bat
    Par younek dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 21/10/2007, 12h21
  2. Intercepter des commandes DOS
    Par gta126 dans le forum Windows
    Réponses: 5
    Dernier message: 22/09/2007, 22h59
  3. Réponses: 2
    Dernier message: 06/07/2007, 15h01
  4. ecrire des commandes dos
    Par warning dans le forum C
    Réponses: 1
    Dernier message: 16/05/2007, 13h55
  5. Lancer des commandes dos à partir d'un fichier texte
    Par tpdm dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/08/2005, 16h56

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