Menu

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

-
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
Afficher la suite 

Votre réponse

7 réponses

Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
1886
0
Merci
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!

Zarwax
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
barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
1886 > Zarwax
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éé
Commenter la réponse de barnabe0057
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019
0
Merci
En plus, je n'arrive pas à le faire fonctionner ...
barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
1886 -
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
Zarwax
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
barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
1886 -
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.
Zarwax
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
barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
1886 -
@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.
Commenter la réponse de Zarwax
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019
0
Merci
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"
Zarwax
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 ? :-)
barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
1886 -
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 ?
Zarwax
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 ...
barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
1886 -
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 ?
Zarwax
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.
Commenter la réponse de Zarwax
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019
0
Merci
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.
Commenter la réponse de Zarwax
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019
0
Merci
@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

Commenter la réponse de Zarwax
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019
0
Merci
Tu vois un peu ce que ça fais ?
Tu me propose donc de faire quoi ?
barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
1886 -
Je suis en train de voir pour optimiser ton script, car il y a beaucoup de doublons ou de lignes inutiles.
Commenter la réponse de Zarwax
Messages postés
14
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
21 mars 2019
0
Merci
C'est niquel.
ça fonctionne super bien

Merci beaucoup
Commenter la réponse de Zarwax