Copier un bout de texte d'un fichier txt

Baptiste -  
brucine Messages postés 21714 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

A voir également:

2 réponses

brucine Messages postés 21714 Date d'inscription   Statut Membre Dernière intervention   3 430
 

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
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
brucine Messages postés 21714 Date d'inscription   Statut Membre Dernière intervention   3 430 > 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
Baptiste > brucine Messages postés 21714 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
brucine Messages postés 21714 Date d'inscription   Statut Membre Dernière intervention   3 430 > 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
Baptiste > brucine Messages postés 21714 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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 

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
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
brucine Messages postés 21714 Date d'inscription   Statut Membre Dernière intervention   3 430
 

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
Baptiste > brucine Messages postés 21714 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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > 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
brucine Messages postés 21714 Date d'inscription   Statut Membre Dernière intervention   3 430 > 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