[Batch] Recherche dans des fichiers XLM
Résolu/Fermé
A voir également:
- [Batch] Recherche dans des fichiers XLM
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Fichier batch - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Renommer des fichiers en masse - Guide
- Explorateur de fichiers - Guide
2 réponses
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
4 918
11 févr. 2019 à 21:04
11 févr. 2019 à 21:04
Salut,
Pour commencer tu confonds le terme "concaténer" avec le terme "découper".
Pour éviter le découpage de tes chaines de caractères tu peux utiliser une commande externe telle que FIND ou bien FINDSTR, cependant tu vas perdre beaucoup en performance et sur des fichiers de 50000 lignes tu vas le sentir passer.
Il n'y a pas de solution simple à ton problème, soit tu utilises une méthode rapide et peu pratique (découpage + IF), soit tu utilises une méthode pratique mais très lente (FIND ou bien FINDSTR)
Pour commencer tu confonds le terme "concaténer" avec le terme "découper".
Pour éviter le découpage de tes chaines de caractères tu peux utiliser une commande externe telle que FIND ou bien FINDSTR, cependant tu vas perdre beaucoup en performance et sur des fichiers de 50000 lignes tu vas le sentir passer.
Il n'y a pas de solution simple à ton problème, soit tu utilises une méthode rapide et peu pratique (découpage + IF), soit tu utilises une méthode pratique mais très lente (FIND ou bien FINDSTR)
Alpha13m
Messages postés
10
Date d'inscription
lundi 8 mai 2017
Statut
Membre
Dernière intervention
7 mars 2019
Modifié le 12 févr. 2019 à 08:49
Modifié le 12 févr. 2019 à 08:49
Hey,
-Merci pour ta réponse, j'ai cette errreur la 'findstr' ou grep n’est pas reconnu en tant que commande interne.
Est ce qu'il faut installer des plugins additionnels?
-Ah l'heure actuelle ma variable qui compte ou ce trouve ma recherche ne prend pas les saut de ligne vide, y a t'il un moyen de gérer ça.?
-Comment tu ferai pour gérer le fait de ne pas savoir qu'elle longeur je vais avoir avant mon perso='1' pour faire mon test ?
-Merci pour ta réponse, j'ai cette errreur la 'findstr' ou grep n’est pas reconnu en tant que commande interne.
Est ce qu'il faut installer des plugins additionnels?
-Ah l'heure actuelle ma variable qui compte ou ce trouve ma recherche ne prend pas les saut de ligne vide, y a t'il un moyen de gérer ça.?
-Comment tu ferai pour gérer le fait de ne pas savoir qu'elle longeur je vais avoir avant mon perso='1' pour faire mon test ?
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
4 918
Modifié le 12 févr. 2019 à 20:21
Modifié le 12 févr. 2019 à 20:21
j'ai cette errreur la 'findstr' ou grep n’est pas reconnu en tant que commande interne
==>> que vient faire GREP dans cette histoire ? FINDSTR est disponible sur toutes les versions depuis windows 2000
Est ce qu'il faut installer des plugins additionnels?
==>> non
-Ah l'heure actuelle ma variable qui compte ou ce trouve ma recherche ne prend pas les saut de ligne vide, y a t'il un moyen de gérer ça.?
==>> oui avec le commutateur /N de la commande FINDSTR
-Comment tu ferai pour gérer le fait de ne pas savoir qu'elle longeur je vais avoir avant mon perso='1' pour faire mon test ?
==>> j'utiliserais FINDSTR
Voilà un bon début de script :
==>> que vient faire GREP dans cette histoire ? FINDSTR est disponible sur toutes les versions depuis windows 2000
Est ce qu'il faut installer des plugins additionnels?
==>> non
-Ah l'heure actuelle ma variable qui compte ou ce trouve ma recherche ne prend pas les saut de ligne vide, y a t'il un moyen de gérer ça.?
==>> oui avec le commutateur /N de la commande FINDSTR
-Comment tu ferai pour gérer le fait de ne pas savoir qu'elle longeur je vais avoir avant mon perso='1' pour faire mon test ?
==>> j'utiliserais FINDSTR
Voilà un bon début de script :
@echo off
setlocal enableextensions disabledelayedexpansion
color 0A
cd /d Z:\Vega\Users\Clement\RechercheXMLPerso || exit /b 1
for %%A in (*.xml) do (
echo. & echo. & echo ###################### %%~fA
findstr /N "F930PERSO=""1""" "%%~A"
)
echo. & echo. & pause
Alpha13m
Messages postés
10
Date d'inscription
lundi 8 mai 2017
Statut
Membre
Dernière intervention
7 mars 2019
13 févr. 2019 à 08:48
13 févr. 2019 à 08:48
Merci pour ta réponse je vais travailler la dessus !
Alpha13m
Messages postés
10
Date d'inscription
lundi 8 mai 2017
Statut
Membre
Dernière intervention
7 mars 2019
13 févr. 2019 à 13:28
13 févr. 2019 à 13:28
Voici l'update, tout marche impeccable.
Le seul soucie qui va me rester c'est comment faire pour retourner le nombre de ligne trouvé. Dans mon document j'ai un parcours dans mon For ce qui fait que dans le errorlevel il y passe une fois et me tourne la valeur 1 ce qui est normal.
Hors dans un fichier je peux avoir plusieurs fois du perso=1 comment on pourrais gérer ce paramètre?
Le seul soucie qui va me rester c'est comment faire pour retourner le nombre de ligne trouvé. Dans mon document j'ai un parcours dans mon For ce qui fait que dans le errorlevel il y passe une fois et me tourne la valeur 1 ce qui est normal.
Hors dans un fichier je peux avoir plusieurs fois du perso=1 comment on pourrais gérer ce paramètre?
:: Recherche dans un dossier parmis tous les fichiers xml present
:: Si l'on trouve le parametre perso=1
@echo off & setlocal enableextensions EnableDelayedExpansion
:: On definis les fichiers a scanner
:: Et la chaine a rechercher
:: Attention pas d'espace dans le chemin d'acces
set PathFiles=Z:\Vega\Users\Clement\RechercheXMLPerso\XML_TEST
set Files=\*.xml
set result2=0
set cptFiles=0
set Ligne=0
echo --------------------------------------------------
echo -- Recherche Repertoire --
echo --------------------------------------------------
echo Path %PathFiles%
echo --------------------------------------------------
echo -- Recherche dans les XML --
echo --------------------------------------------------
for /r "%PathFiles%" %%a in (%Files%) do (
findstr /a:A /n /s "F930PERSO=""1""" "%%a"
Set /a cptFiles += 1
REM echo ERRORLEVEL !ERRORLEVEL!
if !ERRORLEVEL!==0 (
REM echo ERROR 0
Set /a Ligne += 1
)
)
if %Ligne% == 0 (
echo Pas de perso trouver
)
echo --------------------------------------------------
echo -- Total %Ligne% fichiers --
echo --------------------------------------------------
echo -- Fin --
echo --------------------------------------------------
pause
exit
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
4 918
Modifié le 13 févr. 2019 à 19:27
Modifié le 13 févr. 2019 à 19:27
Comme ceci :
@echo off
setlocal enableextensions enabledelayedexpansion
color 0A
cd /d Z:\Vega\Users\Clement\RechercheXMLPerso || exit /b 1
for %%A in (*.xml) do (
set count=-1
for /f "delims=" %%E in ('2^>nul find /N "F930PERSO=""1""" "%%~A"') do (
set /a count+=1
echo %%E
)
echo ---------- Total : !count! occurrences
echo.
)
pause
Alpha13m
Messages postés
10
Date d'inscription
lundi 8 mai 2017
Statut
Membre
Dernière intervention
7 mars 2019
Modifié le 14 févr. 2019 à 10:43
Modifié le 14 févr. 2019 à 10:43
Super merci pour tout le temps que tu as pris pour traiter ça, tout est fonctionnel.
Je voudrais bien quelques explications sur le choix de :
cd /d Z:\Vega\Users\Clement\RechercheXMLPerso || exit /b 1 >
Plutot que d'avoir juste un for /r "%PathFiles%" %%A in (%Files%) do (
set count=-1 > et non pas 0
2^>nul > ??
%%~A plutot que %%A
Dernière petite chose et on en aura fini, est ce qu'il serait possible de colorer uniquement le numéro de la ligne trouvé en vert.
J'ai tester un findstr /a:A /n /s "F930PERSO=""1""" "%%~A mais dans la boucle for la couleur ne fonctionne pas
Bonne journée
Je voudrais bien quelques explications sur le choix de :
cd /d Z:\Vega\Users\Clement\RechercheXMLPerso || exit /b 1 >
Plutot que d'avoir juste un for /r "%PathFiles%" %%A in (%Files%) do (
set count=-1 > et non pas 0
2^>nul > ??
%%~A plutot que %%A
Dernière petite chose et on en aura fini, est ce qu'il serait possible de colorer uniquement le numéro de la ligne trouvé en vert.
J'ai tester un findstr /a:A /n /s "F930PERSO=""1""" "%%~A mais dans la boucle for la couleur ne fonctionne pas
Bonne journée