Bonjour, J'ai besoin de votre aide pour une routine de findstr.
Je m'explique,
Dans une arborescence je cherche en premier a scanner les dossiers qui on un nom qui commence par FME, les autres seront ignoré.
Et pour ces dossiers "FME" je cherche a récupérer toutes les lignes qui contienne DME* qui sont dans un fichier nommé _ps qui lui même est dans le dossier et extraire les chaines DME+14 caractère dans un fichier txt de sortie.
Mon arbo ressemble à ça:
FME34
_ps récupérer les str DME dans ce fichier
abcz...
_ps ignorer
FME265
_ps récupérer les str DME dans ce fichier
Je vous remercie pour votre aide future et excusez moi si mon explication n'est pas claire...
pleaseTellMeWhoIam a écrit :bonjour, un copié-collé ou une capture d'écran du contenu des fichiers dans lesquels effectuer la recherche serait bienvenu
lol te fatigues pas pour des cons qui répondent jamais
Bonjour tout le monde voici le con qui ne répond pas....
Bon pour ceux qui sont intéressé pour l'entraide et non l'insulte immédiate voici comme demandé un capture d'écran du dossier avec l'arborescence et le contenue du fameux fichier _ps.
Petite correction dans le fichier _ps c'est la suite de caractère FME et non pas DME à chercher... Il est possible d'exclure les doublons aussi mais c'est moins important.
Bonjour, voici le résultat obtenu (doublons exclus) avec le code ci-dessous (testé sur une arborescence similaire à celle de la capture, chaque fichier "_ps" étant identique au copié-collé fourni. (Un fichier "fme_strings.txt" est créé dans chaque dossier traité si le fichier"_ps" contient au moins une chaîne "fme"))
@echo off
set a=%random%%random%%random%_%random%%random%%random%
md %tmp%\%a%
md %tmp%\%a%\a
(
dir fme* /ad /b
)>%tmp%\%a%\listeDesDossiers
for /f "tokens=*" %%a in (%tmp%\%a%\listeDesDossiers) do (
cd %%a
(
find /c "fme" _ps
)>%tmp%\%a%\tmpA
for /f "skip=1 tokens=3 delims= " %%a in (%tmp%\%a%\tmpA) do (
set strFound=%%a
)
if not strFound==0 (
(
find "fme" _ps
)>%tmp%\%a%\tmpA
for /f "tokens=1 delims=:" %%a in (%tmp%\%a%\tmpA) do (
(
echo %%a
)>>%tmp%\%a%\tmpB
)
for /f "skip=1 tokens=3 delims= " %%a in (%tmp%\%a%\tmpB) do (
if not exist %tmp%\%a%\a\%%a (
(
type nul
)>%tmp%\%a%\a\%%a
(
echo %%a
)>>fme_strings.txt
)
)
del /q %tmp%\%a%\a\*.*
(
type nul
)>%tmp%\%a%\tmpA
(
type nul
)>%tmp%\%a%\tmpB
)
cd ..
)
rd /s /q %tmp%\%a%
exit
Salut super ton script par contre j'ai un souci que j'ai oublié de cité, le dossier contenant tous les fichier sources sont en lecture seul donc pas possible de créer de fichier dedans.
Par contre est il possible sortir tous les résultats dans un seul fichier?
En tout cas merci beaucoup pour ton aide ça me fait une très bonne base déjà.
Salut, la leture seule ne s'applique normalement qu'aux fichiers. Tu as essayé de créer manuellement un fichier dans un de ces dossiers ?
Pour ce qui est d'écrire tout les résultats dans un même fichier oui, c'est possible.
Ce que tu voudrais c'est avoir les lignes "fme" de tous les fichiers "_ps", doublons exclus, sans savoir de quel fichier vient telle ou telle ligne ?
En fait c'est un dossier réseau de ma société ou il est strictement interdit d'écrire "c'est un vault informatique pour du PLM (conception mécanique)". Je ne pense donc pas que je le puisse.
C'est exactement ça un fichier avec toute les FME compilé ligne par ligne de n'importe quel dossier.
En gros je cherche a faire un énorme extract de toute les FME qui ce trouve dans ce dossier réseau qui contient des milliers de dossier si possible sans les doublons.
Ce fichier sera ensuite traité sous excel.
Bonjour, voilà qui devrait faire l'affaire.
En haut de script, tu modifies les variables "source" et "sortie".
"source" = chemin d'accés au dossier qui contient les dossiers "fme*"
"sortie" = chemin et nom du fichier de sortie
Les écritures nécessaires se font dans un dossier (supprimé en fin de script) créé dans le répertoire temporaire local.
L'emplacement du script n'a plus d'importance.
@echo off
set source=d:\scripts\batch\test
set sortie=%userprofile%\desktop\junk\test\fme_strings.txt
set a=%random%%random%%random%_%random%%random%%random%
md "%tmp%\%a%"
(
dir "%source%\fme*" /ad /b
)>"%tmp%\%a%\listeDesDossiers"
for /f "usebackq tokens=*" %%a in ("%tmp%\%a%\listeDesDossiers") do (
(
find "fme" "%source%\%%a\_ps"
)>>"%tmp%\%a%\tmpA"
)
for /f "usebackq eol=- tokens=1 delims=:" %%a in ("%tmp%\%a%\tmpA") do (
(
echo %%a
)>>"%tmp%\%a%\tmpB"
)
for /f "usebackq eol=- tokens=3 delims= " %%a in ("%tmp%\%a%\tmpB") do (
if not defined %%a (
set %%a=0
(
echo %%a
)>>"%sortie%"
)
)
rd /s /q "%tmp%\%a%"
exit