Copier un bout de texte d'un fichier txt

Baptiste -  
brucine Messages postés 25127 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,

Je cherche à traiter un fichier texte a l'aide du cmd. J'aimerai extraire un petite partie d'un fichier txt le copier et le coller dans une autre ligne de commande. Est-ce possible ? merci


Windows / Firefox 104.0

2 réponses

  1. brucine Messages postés 25127 Date d'inscription   Statut Membre Dernière intervention   4 165
     

    Bonjour,

    Précises?

    Si c'est simplement à la ligne de commande, le procédé est un peu vicieux.

    Supposons

    C:\echo il fait moins beau
    qui me renvoie à la ligne suivante
    C:\il fait moins beau

    Pour copier "moins beau" à la ligne de commande suivante, je dois le sélectionner à la souris (il devient en surbrillance), aller dans le pictogramme de la fenêtre en haut à gauche, modifier, copier, puis coller au nouveau prompt C:\

    Si c'est un batch, il faut que tu précises les caractéristiques que doit avoir le texte à rechercher (emplacement, ce qui suit ou précède, partie caractéristique...)

    0
    1. Baptiste
       

      ok donc si le terme qui précede mon bout de texte est toujours le meme je peux à l'aide d'une commande récupérer le texte qui vient juste après ? Dans mon cas il s'agit de récupérer le nom du réseau auquel est connecté mon PC.

      0
      1. brucine Messages postés 25127 Date d'inscription   Statut Membre Dernière intervention   4 165 > Baptiste
         

        Cela reste flou.

        S'il s'agit de la ligne de commande, il faudrait rediriger la commande vers une variable dont on extrait ce que l'on souhaite dans une nouvelle variable pour la traiter à la ligne de commande, c'est fastidieux et plus volontiers traité dans un batch via par exemple commandes FIND ou FINDSTR.

        Encore faut-il connaître les caractéristiques du texte précédent et comment il est "séparé" de ce qu'on veut extraire, en bref quelle est la syntaxe de ce qu'on a obtenu, commande NETSH, IPCONFIG, fichier texte quelconque contenant la chaîne à extraire, le numéro de ligne y est-il pertinent...?

        Il faut que tu précises ces commandes et/ou la structure du texte source.

        0
      2. Baptiste > brucine Messages postés 25127 Date d'inscription   Statut Membre Dernière intervention  
         

        Je traite un retour de commande ipconfig stocké dans un fichier txt. Je suis parvenu à isoler la ligne sur laquelle se trouve le nom du profil avec FINDSTR. Je me retrouve avec un résultat ayant cette syntaxe :

        Profil :         *nom profil*

        Il me reste donc à parvenir à sélectionner uniquement le nom du profil pour pouvoir m'en resservir dans mon batch ... Je cherche ...

        0
      3. brucine Messages postés 25127 Date d'inscription   Statut Membre Dernière intervention   4 165 > Baptiste
         

        Au risque de paraître borné, je n'ai pas de notion de Profil dans la commande IPCONFIG ni même dans la commande
        IPCONFIG /ALL; quelle est ta commande, sur une machine isolée, un serveur?

        Qui plus est la commande IPCONFIG rend tout au kilomètre, on risque d'avoir plusieurs occurrences du mot Profil et de son nom en présence de plusieurs adaptateurs réseau.

        A nouveau, il faut donc que tu mettes en ligne la commande ou le texte utilisé (quitte à y changer des informations personnelles par des informations bidon) pour essayer de trouver "l'astuce"; selon le contexte, il est d'ailleurs fort possible qu'une autre commande (par exemple WMIC) cible de manière beaucoup plus précise l'information recherchée.

        0
      4. Baptiste > brucine Messages postés 25127 Date d'inscription   Statut Membre Dernière intervention  
         

        Alors voila le topo : j'abandonne ipconfig j'ai plus simple !

        netsh wlan show interfaces > recup.txt

        j'envoie ça dans un fichier txt j'ai tout de même deux occurrence du mot profil. A partir de la j'effectue :

        findstr Profil recup.txt

        et j'obtiens

        Mode de connexion        : Profil
            Profil                : *nom profil*

        Je cherche à isoler *nom profil* pour pouvoir m'en servir dans une autre commande (je ne sais meme pas si c'est faisable je débute !)

        0
  2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     

    Bonjour (tous les deux),

    Je n'ai pas pu tester mais ça devrait faire l'affaire :

    @echo off
    setlocal enabledelayedexpansion
    
    for /f "tokens=2 delims=:" %%A in ('netsh wlan show interfaces ^| findstr "Profil"') do set "profil=%%A"
    set "profil=!profil: =!"
    
    echo ==^>^> !profil!
    pause

    Pas besoin de passer par un fichier texte avec cette méthode.



    0
    1. Baptiste
       

      Hello je n'ai pas tout compris dans ces quelques lignes mais en effet ça fonctionne ! Un peu déçu de voir que c'était si simple que ça ... mais merci beaucoup pour la soluce.

      0
    2. brucine Messages postés 25127 Date d'inscription   Statut Membre Dernière intervention   4 165
       

      Bonjour,

      Oui, une fois le besoin clairement défini ça ne pose pas d'autre problème que d'enlever les caractères qui dépassent.

      Une fois le Wifi activé (sans quoi ça ne risquait pas de marcher), la commande netsh wlan show interfaces rend en effet quelque chose du style Profil: Tartempion, je dois donc enlever les deux points et l'espace.

      Une alternative qui revient au même:


       

      @echo off
      
      FOR /F "tokens=4,* skip=4" %%a in ('netsh wlan show profile') do (
          set WIFI-NAME=%%b
      )
      set WIFI-NAME=%WIFI-NAME:~3%
      echo %WIFI-NAME%
      
      pause
      goto :EOF
      0
      1. Baptiste > brucine Messages postés 25127 Date d'inscription   Statut Membre Dernière intervention  
         

        Vos deux soluces se valent ! dernier problème mes espaces sautent dans la variable et donc certains nom de réseau sont erronés et voient leurs espaces disparaitre. Comment puis-je m'assurer que ces espaces soient conservés ?

        0
      2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > Baptiste
         

        Pour info, un professionnel ne met jamais d'espace dans un SSID.

        Pour conserver les espaces il suffit de supprimer cette ligne :

        set "profil=!profil: =!"
        0
      3. brucine Messages postés 25127 Date d'inscription   Statut Membre Dernière intervention   4 165 > Baptiste
         

        Les espaces avant : MA-BOX sont gérés, on les a fait sauter exprès pour afficher MA-BOX.

        Si c'est le nom du profil qui contient des espaces, je ne peux pas tester directement parce que ce n'est pas mon cas.

        On obtient un fichier test en écrivant:
         

        @echo off
        CHCP 65001
        netsh wlan show profiles > wlan.txt

        On constate la raison de skip=4 (j'ai du virer celles d'avant qui ne m'intéressent pas) et je renomme au besoin le nom du profil pour test, j'obtiens:
         

        Profil Tous les utilisateurs     : MA BOX

        qui est la raison de tokens=4 (je dois virer les 4 premiers mots).

        Si maintenant je transite par ce fichier texte, la sortie est correcte même avec un espace:
         

        @echo off
        CHCP 65001
        netsh wlan show profiles > wlan.txt
        FOR /F "tokens=4,*" %%a in (wlan.txt) do (
            set WIFI-NAME=%%b
        )
        set WIFI-NAME=%WIFI-NAME:~4%
        echo %WIFI-NAME%
        
        pause
        goto :EOF

        Si je ne veux pas passer par un fichier texte (encore une fois je ne peux pas tester), on aurait probablement besoin (puisque maintenant je n'ai plus 4 mais 5 tokens), de quelque chose du genre:
         

        @echo off
        
        FOR /F "tokens=4,5* skip=4" %%a in ('netsh wlan show profile') do (
            set WIFI1=%%b
            set WIFI2=%%C
        )
        set WIFI1=%WIFI1:~3%
        set WIFI=%WIFI1%%WIFI2%
        echo %WIFI%
        
        pause
        goto :EOF





         

        0