Ajouter un mot en début de ligne spécifique [Fermé]

Signaler
-
 ulfheonar -
Bonjour,

Je souhaiterai commenter (en ajoutant une dièse en début de ligne) automatiquement des lignes contenant des lettres précise dans un fichier ini.

Par exemple je souhaiterai commenter une ligne qui contient les lettres "mysql", la ligne peut donc contenir le mot "mysql_cluster" ou encore "variable_mysql"..

La seule chose que j'arrive à faire actuellement c'est de supprimer les lignes en question avec la commande ci-dessous, je n'ai pas trouvé mieux :(

Type %fichier% |Findstr /v "mysql" > %ftemp%


Si vous avez des idées je suis preneur,

Merci.

1 réponse

Messages postés
13547
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
22 juin 2021
4 410
Bonjour,

Essaie comme ça :

for /f "usebackq delims=" %%A in ("%fichier%") do (
echo %%A | findstr "mysql" && echo # %%A >> %ftemp% || echo %%A >> %ftemp%
)


Bonjour, merci pour cette bonne idée.
L' ennuie c'est que la ligne vide ne rentre pas dans la boucle for /f
Donc %%A n'est jamais égal à rien.
J'ai vu sur ce forum qu'ils ont l'air d'avoir réussi à prendre en compte les sauts de lignes dans la boucle for : https://stackoverflow.com/questions/38723595/preserve-empty-lines-in-a-text-file-while-using-batch-for-f

Mais je n'ai pas réussi à l'adapter à mon code, j'obtiens des chiffres 1:, 2:, 3: devant chaque ligne.
Messages postés
13547
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
22 juin 2021
4 410 > ulfheonar
Avec un peu d'imagination ça donne ça :

@echo off
setlocal enableextensions disabledelayedexpansion

cd %USERPROFILE%\Desktop

set ftemp=
set fichier=

echo. >%ftemp%

>%ftemp% (
for /f "tokens=1,* delims=:" %%i in ('findstr /n "^" "%fichier%"') do (
(echo(%%j | findstr "mysql" >nul) && echo(# %%j || echo(%%j
)
)
Bonjour Barnabe,

Merci beaucoup pour votre code :D, cela fonctionne très bien mais je n'arrive pas à comprendre entièrement son fonctionnement.

Apparemment il n'y a pas besoin de faire le premier echo. >%ftemp% car le fichier ftemp se créé avec la commande >%ftemp%

J'essaie n'analyser votre code, pourriez vous me donner votre avis :

- findstr /n , "/n" ajoute un chiffre suivi du caractère ":" devant chaque lignes même si elles sont vides, ce qui permet de récupérer toutes les lignes même les vides

- delims=: précise qu'il faut rechercher ce qu'il y a entre les caractère ":"
-
tokens=1,* "1" permet de dire qu'on recherche ce qu'il y avant le caractère ":" cela sera la variable %%i, même si on affiche pas %%i cela permet que les lignes vides soient prise en comptes
"*" permet de mettre tout ce qu'il y a après le premier delimiteur ":" dans la variable suivant le "%%i", donc "%%j"

- Je n'arrive pas à comprendre le cheminement des différentes parenthèses :

echo (%%j | findstr "mysql" >nul)
findstr cherche la chaine mysql dans le echo et la supprime

&& echo(# %%j || echo(%%j)
&& récupère ce qui est renvoyé entre les parenthèse du précédent echo, si le findstr s'est executé il fait un echo sinon il passe à ||, c'est une condition IF implicite ? Je n'arrive pas a comprendre son fonctionnement.

Aussi, j'observe que la parenthèse devant le premier echo peut être enlevé et j'obtiens le même résultat.

Merci encore.
Messages postés
13547
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
22 juin 2021
4 410 > ulfheonar
Tu as bien compris le fonctionnement de FINDSTR et de la boucle FOR.

echo (%%j | findstr "mysql" >nul)
findstr cherche la chaine mysql dans le echo et la supprime

==>> cette commande recherche uniquement les lignes contenant mysql

&& echo(# %%j || echo(%%j)
==>> c'est effectivement une condition, si la commande précédente s'est déroulée correctement on exécute ce qui se trouve après le &&, si elle s'est mal déroulée on exécute se qui se trouve après le ||

Il y a plusieurs manières d'écrire le ECHO, voilà une documentation très précieuse :
https://www.developpez.net/forums/d876934/general-developpement/programmation-systeme/windows/scripts-batch/breve-explication-quelques-notions-basiques/

Pour aller plus loin :
https://www.developpez.net/forums/d861260/general-developpement/programmation-systeme/windows/scripts-batch/trucs-astuces-divers/

ps : effectivement c'est un oubli de ma part, il n'y a pas besoin de faire le premier echo. >%ftemp%
Bonjour Barnabe,

Merci encore pour ton script et merci pour les liens :)