Comment récupérer des mots dans un fichier txt ? [Résolu/Fermé]

Signaler
-
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
-
Bonjour,

J'aimerais pouvoir récupérer les mots après les "=" afin de pouvoir les insérer dans des variables d'un autre fichier bat.
Comment faire ?

Exemple du fichier texte :



MEMOIRE1
_____________________________
Carte=Ethernet
Ip=192.168.164.24
Mask=255.255.255.128
Passerelle=192.168.164.1
Dns=




La première ligne est "Memoire1" et la dernière "DNS=".

Pouvez-vous m'expliquer la commande bat à écrire pour récupérer par exemple "Ethernet" et le stocker dans une variable d'un autre fichier ?

Merci Beaucoup

7 réponses

Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
3 327
Bonjour,

Il faut utiliser la boucle FOR /F pour parcourir ton fichier texte :

setlocal enableextensions enabledelayedexpansion

for /f "tokens=1,2 delims=^=" %%A in (fichier.txt) do (
set %%A=%%B
)

call fichier.bat !carte! !ip! !mask! !passerelle! !dns!

Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019

Merci banabe0057 pour ta réponse.

Pourrais -tu m'expliquer ce que font les différentes choses ? Car je n'ai pas vraiment réussi à comprendre.
Merci
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
3 327 >
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019

La boucle FOR /F lit le fichier texte une ligne après l'autre, découpe chaque ligne en 2 parties suivant le caractère =

La commande SET définit des nouvelles variables (%%A correspond à la première partie de chaque ligne, %%B correspond à la deuxième partie)

La commande CALL appelle ton autre script .bat en lui transférant les variables que l'on a créé
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019

En plus, je n'arrive pas à le faire fonctionner ...
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
3 327
C'est normal tu n'as pas donné toutes les informations nécessaires :

- nom et chemin du fichier texte
- nom et chemin de l'autre fichier .bat
- contenu entier du script
- contenu entier de l'autre fichier .bat
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019

Ce que j'aimerais, c'est qu'un fichier bat, lors de son exécution, aille chercher les informations dans le fichier texte, et modifie les variables du fichier bat en cours.

Je sais pas si c'est compréhensible
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
3 327
Ca commence à être un peu plus clair, il n'y a donc pas d'autre fichier .bat

Si tu donnais le contenu de ton script et le nom des variables à affecter ça serait plus simple.
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019

Il y a dans le fichier bat les variables suivantes :

CarteM1
IPM1
MaskM1
PasserelleM1
DnsM1

Elle devrait recevoir du coup les valeurs du fichier texte.
Exemple : Carte à CarteM1
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
3 327
@echo off
setlocal enableextensions enabledelayedexpansion

cd %USERPROFILE%\OneDrive\Bureau\Config

for /f "tokens=1,2 delims=^=" %%A in (Memoire1.txt) do (
set %%AM1=%%B
)

call EXEMPLE.bat !carteM1! !ipM1! !maskM1! !passerelleM1! !dnsM1!

pause

Si tu veux que ça marche, donne-moi le contenu de l'autre fichier.
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019

Comme ça ?

setlocal enableextensions enabledelayedexpansion

for /f "tokens=1,2 delims=^=" %%A in (C:\Users\timot\OneDrive\Bureau\Config\Memoire1.txt) do (
set %%A=%%B
)

call C:\Users\timot\OneDrive\Bureau\Config\EXEMPLE.bat !carte! !ip! !mask! !passerelle! !dns!



Fichier TXT : "C:\Users\timot\OneDrive\Bureau\Config\Memoire1.txt"
Fichier BAT : "C:\Users\timot\OneDrive\Bureau\Config\EXEMPLE.bat"
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019

En gros, c'est tout un programme qui permet de modifier l'adressage ip.
Et ce que je voulais c'était d'avoir un système de "Mémoire" afin de pouvoir avoir quelques configurations déjà préparées.
L'idées que j'ai eu, est d'avoir un fichier à part permettant de faire office de mémoire. (Si tu as une autre idée pour la mémoire, volontiers).

Je voulais aussi que ça soit dans un autre fichier, comme ça, je peut transformer le .bat en .exe afin d'avoir comme une mini application.

La question est donc, de pouvoir prendre les informations du fichier texte, par exemple la carte dont la valeur est sur cet exemple "Ethernet" afin de pouvoir l'affecté à la variable "CarteM1" dans le fichier bat (exe) et pouvoir continuer la suite de mon programme.

Tu vois ce que je veux dire ? :-)
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
3 327
J'ai déjà fait ce genre de choses, mais mes variables étaient codées en dur dans le script, je n'aime pas avoir 36 fichiers différents.

@echo off
setlocal enableextensions enabledelayedexpansion

cd %USERPROFILE%\OneDrive\Bureau\Config

for /f "tokens=1,2 delims=^=" %%A in (Memoire1.txt) do (set %%A=%%B)

rem
rem la suite de ton programme
rem
rem à toi d'utiliser les variables !carteM1! !ipM1! !maskM1! !passerelleM1! !dnsM1!
rem comme bon te semble
rem


Comment choisis-tu la configuration à appliquer ?
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019

J'ai pas bien compris ta question ...
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
3 327
Parmi tes 3 configurations, comment choisis-tu la configuration à appliquer ?

- tu demandes à l'utilisateur de choisir ou bien c'est toi qui choisit ?
- a quel moment ? au lancement du script, tous les x heures ou bien à un moment précis ?
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019

Ah oui, je vois
C'est avec des questions demandées à l'utilisateur.
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019

Si possible, j'aurais voulu avoir 3 "mémoires".

Je l'aurais donc fais comme ça le fichier texte :

MEMOIRE 1
__________________________________
CarteM1=Ethernet
IPM1= 192.168.14.52
MaskM1=255.255.255.128
PasserelleM1=192.168.14.1
DnsM1=


MEMOIRE 2
__________________________________
CarteM2=Ethernet
IPM2= 192.168.14.52
MaskM2=255.255.255.128
PasserelleM2=192.168.14.1
DnsM2=


MEMOIRE 3
__________________________________
CarteM3=Ethernet
IPM3= 192.168.14.52
MaskM3=255.255.255.128
PasserelleM3=192.168.14.1
DnsM3=



Du coup, la valeur du fichier texte serait par exemple : "CarteM1" et la variable du fichier bat serait la même ("CarteM1").
Les valeurs sont pour l'exemple.
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019

@echo off
chcp 1252> NUL
title Configuration IP
Mode con cols=150 lines=50




echo.

echo Changement de la configuration IPv4
echo _____________________________________________________________________
echo.

goto :MANUELOUAUTOMATIQUE


:MANUELOUAUTOMATIQUE
echo Voulez-vous passer en mode MANUEL ou en mode AUTOMATIQUE ? (M/A)

SET /P reponseMode=

IF %reponseMode% == m (
goto :MANUEL
)
if %reponseMode% == M (
goto :MANUEL
)
if %reponseMode% == a (
goto :AUTOMATIQUE
)
if %reponseMode% == A (
goto :AUTOMATIQUE
)
if %reponseMode% == exit (
exit
)else (
goto :MANUELOUAUTOMATIQUE
)


:MANUEL
cls
echo.


echo Entrez le nom de la CARTE réseau à modifier:
SET /P CARTE=

echo.
echo Entrez l'adresse IP :
SET /P IP=

echo.
echo MASQUE
echo Résumé des masques :
echo /24 255.255.255.0
echo /25 255.255.255.128
echo /26 255.255.255.192
echo /27 255.255.255.224
echo /28 255.255.255.240
echo /29 255.255.255.248
echo /30 255.255.255.252
echo /31 255.255.255.254
echo /32 255.255.255.255
echo.
echo Entrez le MASQUE (255.255.255.128 / 25) :
SET /P MASK=

if %MASK% == 24 (
SET MASK=255.255.255.0
)

if %MASK% == 25 (
SET MASK=255.255.255.128
)

if %MASK% == 26 (
SET MASK=255.255.255.192
)

if %MASK% == 27 (
SET MASK=255.255.255.224
)

if %MASK% == 28 (
SET MASK=255.255.255.240
)

if %MASK% == 29 (
SET MASK=255.255.255.248
)

if %MASK% == 30 (
SET MASK=255.255.255.252
)

if %MASK% == 31 (
SET MASK=255.255.255.254
)

if %MASK% == 32 (
SET MASK=255.255.255.255
)


echo.
echo Entrez la PASSERELLE :
SET /P PASSERELLE=


:DNSOUIOUNON
echo.
echo Voulez-vous entrer un DNS (O/N)
echo (La configuration du DNS prends quelques secondes ...)
SET /P addressDNS=


if %addressDNS% == o (
goto :ADDRESSEDUDNS
)

if %addressDNS% == O (
goto :ADDRESSEDUDNS
)

if %addressDNS% == n (
goto :EXECUTIONCLAVIER
)

if %addressDNS% == n (
goto :EXECUTIONCLAVIER
)

goto :DNSOUIOUNON


:ADDRESSEDUDNS
echo.
echo Entrez un DNS :
SET /P entreeDNS=

netsh interface ipv4 set address "%CARTE%" static %IP% "%MASK%" %PASSERELLE% > NUL

netsh interface ipv4 set DNS "%CARTE%" static %entreeDNS% primary> NUL

cls
echo.
echo Vous avez configurez :
echo.
echo Carte : %CARTE%
echo IP : %IP%
echo Masque : %MASK%
echo Passerelle: %PASSERELLE%
echo DNS : %entreeDNS%

goto :END

:EXECUTIONCLAVIER
cls

netsh interface ipv4 set address "%CARTE%" static %IP% "%MASK%" %PASSERELLE% > NUL


cls
echo.
echo Vous avez configurez :
echo.
echo Carte : %CARTE%
echo IP : %IP%
echo Masque : %MASK%
echo Passerelle: %PASSERELLE%

goto :END




:AUTOMATIQUE
cls
echo.
echo AUTOMATIQUE


:AUTOMATIQUECLAVIER
echo Entrez le nom de la CARTE réseau :
SET /P CARTEAUTOMATIQUE=

goto :EXECUTIONCARTEAUTOMATIQUE


:AUTOMATIQUEMEMOIRE
echo De quelle mémoire voulez-vous mettre en automatique la CARTE ? (1/2/3)
echo.
echo // Mémoire 1
echo Carte : %CarteM1%
echo IP : %IpM1%
echo Masque : %MaskM1%
echo Passerelle: %PasserelleM1%
echo DNS : %DnsM1%

echo.
echo.
echo // Mémoire 2
echo Carte : %CarteM2%
echo IP : %IpM2%
echo Masque : %MaskM2%
echo Passerelle: %PasserelleM2%
echo DNS : %DnsM2%

echo.
echo.
echo // Mémoire 3
echo Carte : %CarteM3%
echo IP : %IpM3%
echo Masque : %MaskM3%
echo Passerelle: %PasserelleM3%
echo DNS : %DnsM3%

echo.
echo De quelle mémoire voulez-vous mettre en automatique la CARTE ? (1/2/3)
SET /P reponseAutomatiqueMemoire=

goto :MODIFICATIONDELACARTEAUTOMATIQUE


:MODIFICATIONDELACARTEAUTOMATIQUE
IF %reponseAutomatiqueMemoire% == 1 (
SET CARTEAUTOMATIQUE=%CarteM1%
goto :EXECUTIONCARTEAUTOMATIQUE
)
if %reponseAutomatiqueMemoire% == 2 (
SET CARTEAUTOMATIQUE=%CarteM2%
goto :EXECUTIONCARTEAUTOMATIQUE
)
if %reponseAutomatiqueMemoire% == 3 (
SET CARTEAUTOMATIQUE=%CarteM2%
goto :EXECUTIONCARTEAUTOMATIQUE
)


:EXECUTIONCARTEAUTOMATIQUE

cls
echo.

netsh interface ipv4 reset > NUL

netsh interface ipv4 set address "%CARTEAUTOMATIQUE%" source=dhcp

netsh interface ipv4 set dns "%CARTEAUTOMATIQUE%" source=dhcp




echo.
echo Vous avez configuré :
echo.
echo Carte : %CARTEAUTOMATIQUE%
echo IP : DHCP
echo DNS : DHCP

goto :END




:END
pause > NUL
exit

Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019

Tu vois un peu ce que ça fais ?
Tu me propose donc de faire quoi ?
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
3 327
Je suis en train de voir pour optimiser ton script, car il y a beaucoup de doublons ou de lignes inutiles.
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019

C'est niquel.
ça fonctionne super bien

Merci beaucoup