Copier un bout de texte d'un fichier txt

Fermé
Baptiste - 13 sept. 2022 à 16:29
brucine Messages postés 14341 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024 - 14 sept. 2022 à 12:23

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 14341 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024 1 818
13 sept. 2022 à 16:51

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

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 14341 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024 1 818 > Baptiste
14 sept. 2022 à 09:24

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 14341 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024
14 sept. 2022 à 09:34

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 14341 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024 1 818 > Baptiste
14 sept. 2022 à 09:55

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 14341 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024
14 sept. 2022 à 10:17

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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 14 sept. 2022 à 11:13

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

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 14341 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024 1 818
14 sept. 2022 à 11:29

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 14341 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024
14 sept. 2022 à 11:39

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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > Baptiste
Modifié le 14 sept. 2022 à 12:18

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 14341 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024 1 818 > Baptiste
14 sept. 2022 à 12:23

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