Copier un bout de texte d'un fichier txt
Fermé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
- Copier un bout de texte d'un fichier txt
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier host - Guide
- Fichier iso - Guide
2 réponses
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...)
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.
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
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 ?
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: =!"
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
14 sept. 2022 à 09:06
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.
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.
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 ...
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.
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 !)