Partage
  • Partager sur Facebook
  • Partager sur Twitter

BATCH - parcourir un chaine de caractère

:~+43%

Sujet résolu
6 janvier 2021 à 14:01:55

Bonjour,

je viens vers vous car j'ai un soucis depuis quelques heures que je peine à résoudre..

Voici mon problème.

J'ai une suite de lignes dans un fichier txt que je souhaite parcourir une par une et enregistrer leurs contenu dans une variable à partir du 43èmme caractère.

Pour cela dans un premier temps j'ai fais ceci (qui fonctionne)

Set "Filename=  1          75  4294967295  connected     Loopback Pseudo-Interface 1"
echo %Filename%
Set "Filename=%Filename:~+43%"
echo %FILENAME%

 et il me retourne cela.

 1          75  4294967295  connected     Loopback Pseudo-Interface 1
Loopback Pseudo-Interface 1

maintenant je veux faire la même chose mais dans une boucle donc pour cela j'ai fais ceci :

for /f "skip=3 delims=" %%i in ('type tempFile.txt') do (
	echo %%i
	set Filename=%%i:~+43%
	echo %Filename%
	rem echo voici le resultat : %Filename%
	)



mais au lieu de me retourner ce que je veux (le résultat au dessus) il me retourne cela :

  4          65        1500  disconnected  Connexion réseau Bluetooth
Commande ECHO désactivée.
  7          35        1500  connected     VMware Network Adapter VMnet1
Commande ECHO désactivée.
 10          35        1500  connected     VMware Network Adapter VMnet8
Commande ECHO désactivée.
 22          35        1500  disconnected  Ethernet 3
Commande ECHO désactivée.
  3           5        1392  disconnected  Ethernet 4
Commande ECHO désactivée.


Si quelqu'un pouvais m'aider..

Merci d'avance !

À j'oubliais, bonne année :p

-
Edité par JulienOo 6 janvier 2021 à 14:02:22

  • Partager sur Facebook
  • Partager sur Twitter
7 janvier 2021 à 3:21:13

As-tu essayé:
echo "%%i"
Voici ce que echo /? me donne:
Affiche des messages ou active/désactive l’affichage des commandes.                                                    
  ECHO [ON | OFF]                                                                                                      
  ECHO [message]                                                                                                       
Entrez ECHO sans paramètre pour afficher l’état en cours de la commande.
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

7 janvier 2021 à 7:22:53

Oui bien-sûr, il m'affiche ce message (Commande ECHO désactivée.) car là la variable est vide… si je mets du texte avant ou après la variable il me l'affiche faisant disparaître en même temps le message…

edit : et oui j'ai bien testé le "echo %%i" et il m'affiche bien les lignes demandées comme j'ai mis sur le résultat…

-
Edité par JulienOo 7 janvier 2021 à 8:11:23

  • Partager sur Facebook
  • Partager sur Twitter
7 janvier 2021 à 17:59:56

Je pense que la syntaxe %%i:~+43% donne un mauvais résultat. Ça me surprend même que tu n'aies pas d'erreur.
Essaies:
set Filename=%%i
set Filename=%Filename:~+43%
Ça devrait mieux fonctionner.
 C'est comme si cmd ne reconnaissait pas une forme avec 3  %
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

7 janvier 2021 à 18:43:57

merci pour ta réponse..

J'ai passé "@echo off" en "@echo on".

voici le contenu du fichier "tempFile.txt"

Idx     M‚t         MTU          tat                Nom
---  ----------  ----------  ------------  ---------------------------
  1          75  4294967295  connected     Loopback Pseudo-Interface 1
 10          25        1500  disconnected  Connexion au r‚seau local
 15          70        1500  disconnected  Wi-Fi
 17          65        1500  disconnected  Connexion r‚seau Bluetooth
 21          25        1500  disconnected  Connexion au r‚seau local* 1
  6          25        1500  connected     Ethernet
 22          25        1500  disconnected  Connexion au r‚seau local* 10
  4          25        1500  connected     VirtualBox Host-Only Network

voici le code à présent avec juste la partie qui pose problème

@echo off
for /f "skip=3 delims=" %%i in ('type tempFile.txt') do ( set Filename=%%i set Filename=%Filename:~+43% echo %Filename% )

et voici ce j'ai au retour

je viens de m'appercevoir que je n'ai pas de soucis avec "%%i" quand les "%%" sont en violet et que le "i" et en blanc.
Quand c'est en jaune c'est là que sa pause problème..
edit : mon éditeur est sublime text 3
merci d'avance pour ta réponse


-
Edité par JulienOo 7 janvier 2021 à 19:06:55

  • Partager sur Facebook
  • Partager sur Twitter
8 janvier 2021 à 4:33:22

Pour ce qui est de la couleur, désolé, j'utilise Block-Notes et je vais directement sur cmd.
Je retrouve le même problème et je n'ai pas réussi à le corriger.
Ce n'est pas le découpage qui pose problème.
J'ai essayé directemenrt sur cmd:
set aa=123456789
set aa=%aa:~3%
echo %aa%
et ça me donne:
456789
Je fais la même chose dans un script .bat et j'ai le même résultat.
J'ai également essayé le script qui pose problème avec @echo on
Je peux voir l'assignation sur la ligne de commande mais on dirait que ça se perd quelque part.
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

15 janvier 2021 à 18:16:36

Bonjour,

Je croie que le problème viens de la création d'un variable dans une boucle FOR

J'ai eu le même problème en batch (je l'avais résolue en remplaçant le for par un goto)

-
Edité par Bidouillman 15 janvier 2021 à 18:45:09

  • Partager sur Facebook
  • Partager sur Twitter

Le code est notre langue, la programmation notre passion, la technologie notre avenir!

15 janvier 2021 à 19:28:53

Tu ne peux pas faire de goto avec une liste d'arguments?
Comment ferait-on si on ne connais pas la liste des éléments du fichier à l'avance?
C'est vraiment la définition des variables qui pose problème, car mes for fonctionnent si les noms sont des fichiers et que j'agit sur leur contenu.
J'ai déjà fait quelque chose du genre:
echo %%i | sed ... >> sortie
OK, Tout le monde n'a pas sed sur Windows ...
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

15 janvier 2021 à 19:42:12

J'ai ça setlocal enabledelayedexpansion et tu peut crée une variable dans un for (en remplaçant les %% par des !!)
@echo off
setlocal enabledelayedexpansion
for /l %%a in (0,1,99) do (
set essai=texte
echo !essai!
)
	endlocal

pause

Il y a surement un problème avec %%i:~+43% 

Ps: C'est quoi sed et a quoi sert 'il...?

@echo off
setlocal enabledelayedexpansion
::ceci ne marche pas pourquoi?... je ne sais pas

for /f "skip=3 delims=" %%i in ('type abc.txt') do (
    echo %%i
    set truc=%%i:~+3%

    echo !truc!

	
	pause
)
endlocal 

-
Edité par Bidouillman 15 janvier 2021 à 20:15:33

  • Partager sur Facebook
  • Partager sur Twitter

Le code est notre langue, la programmation notre passion, la technologie notre avenir!

16 janvier 2021 à 2:17:52

nLe programme sed vient de Unix/Linux.
Ce que j'ai voulu illustrer est que echo fait suivre l'outpput dans l'input d'un autre programme.
Ce n'est pas le %%i qui ne fonctionne pas ici.
La forme %%i:~+43% contient 3 '%'. Je serais surpris que cmd accepte cette forme.
Mais cmd ne me donne aucune erreur. C'est ça le pire ...
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

16 janvier 2021 à 11:38:50

ReBonjour

Enfin j'ai ce que tu veux 

@echo off

setlocal enabledelayedexpansion

:step1
set ligne=

::numero de ligne (qui s'incrémente automatiquement)
set /a numero+=1




for /f "delims=" %%a in ('more/e +!numero! ^< bat2.txt') do (
if not defined ligne set "ligne=%%a"
)
::Affiche la ligne en enlevant le 1er caractere

echo %ligne:~1%
echo %numero%
pause
 
goto step1

endlocal


 Passe ton  sujet en résolue !!! :)

-
Edité par Bidouillman 16 janvier 2021 à 14:52:34

  • Partager sur Facebook
  • Partager sur Twitter

Le code est notre langue, la programmation notre passion, la technologie notre avenir!

16 janvier 2021 à 17:51:35

Il semble qu'on a perdu JulienOo
Je prend note de la solution.
Mais ce n'est pas moi qui peut mettre le sujet en résolu.
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

16 janvier 2021 à 19:20:45

😂Oui j'avais remarqué il n'est pas revenue depuis le 10/01/21
  • Partager sur Facebook
  • Partager sur Twitter

Le code est notre langue, la programmation notre passion, la technologie notre avenir!

23 février 2021 à 20:22:57

me revoilà, désolé pour mon absence..

Merci beaucoup pour votre aide !

J'avais complétement oublié de retourner sur le sujet.. :/

Voici ce que j'ai réussi également à faire de mon côté.

@echo off & Setlocal enabledelayedexpansion

REM RECUPERE TOUTE LES CARTES RESEAUX
chcp 1252 > NUL
netsh interface ipv4 show interface > tempFile1.txt
chcp 850 > NUL

REM NETTOYAGE DU RESULTAT
for /f "skip=3 delims=" %%i in ('type tempFile1.txt') do (
	set var=%%i
	rem chcp 1252
	echo !var:~43! >> tempFile.txt
	)

pause

 Bonne soirée,

je passe le sujet en résolu :D



  • Partager sur Facebook
  • Partager sur Twitter