1er Batch pour un novice

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

KrosPj
Batcheur occasionnel
Messages : 5
Enregistré le : 09 déc. 2016 20:47

1er Batch pour un novice

Message par KrosPj »

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 :arrow: récupérer les str DME dans ce fichier
abcz...
_ps ignorer
FME265
_ps :arrow: 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
Batcheur débutant
Messages : 10
Enregistré le : 05 nov. 2015 07:48

Re: 1er Batch pour un novice

Message par pleaseTellMeWhoIam »

bonjour, un copié-collé ou une capture d'écran du contenu des fichiers dans lesquels effectuer la recherche serait bienvenu
137Cs
Batcheur occasionnel
Messages : 3
Enregistré le : 25 mai 2016 08:45

Re: 1er Batch pour un novice

Message par 137Cs »

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
KrosPj
Batcheur occasionnel
Messages : 5
Enregistré le : 09 déc. 2016 20:47

Re: 1er Batch pour un novice

Message par KrosPj »

Bonjour tout le monde voici le con qui ne répond pas.... :D

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.

Merci d'avance

Image
1 COMPONENT-NAME fme92b700101_1
1 CLASS-NAME fme92b700101
1 INSTANCE 1
1 PARENT-NAME NULL
1 ITEM-NAME fme92b700101
1 TYPE T PS Y
1 COMPONENT-ORDER 1
1 ORIENTATION 0.0 0.0 0.0 0.0 0.0 0.0
1 GLOBAL-ORIENT 0 0 0 0 0 0
2 ATTRIBUTE fme92b700101_1:DESIGNATION:INSTANCE:MON.SUP.C0/C11 SUP G
3 ATTRIBUTE fme92b700101_1:POSTE-MONTAGE:INSTANCE:25000
4 ATTRIBUTE fme92b700101_1:RESP-BE:INSTANCE:PA82
5 ATTRIBUTE fme92b700101_1:RESP-PROD:INSTANCE:4H1
6 ATTRIBUTE fme92b700101_1:IDENTIFICATION:INSTANCE:RF
7 ATTRIBUTE fme92b700101_1:RESP-USINE:INSTANCE:NZ
2 COMPONENT-NAME fme92b700101-001_1
2 CLASS-NAME fme92b700101-001
2 INSTANCE 1
2 PARENT-NAME fme92b700101_1
2 ITEM-NAME fme92b700101-001
2 TYPE T PS Y
2 COMPONENT-ORDER 2
2 ORIENTATION 0.0 0.0 0.0 0.0 0.0 0.0
3 COMPONENT-NAME fme92b700101-002_1
3 CLASS-NAME fme92b700101-002
3 INSTANCE 1
3 PARENT-NAME fme92b700101_1
3 ITEM-NAME fme92b700101-002
3 TYPE T PS Y
3 COMPONENT-ORDER 3
3 ORIENTATION 0.0 0.0 0.0 0.0 0.0 0.0
4 COMPONENT-NAME fme92b700101-003_1
4 CLASS-NAME fme92b700101-003
4 INSTANCE 1
4 PARENT-NAME fme92b700101_1
4 ITEM-NAME fme92b700101-003
4 TYPE T PS Y
4 COMPONENT-ORDER 4
4 ORIENTATION 0.0 0.0 0.0 0.0 0.0 0.0
pleaseTellMeWhoIam
Batcheur débutant
Messages : 10
Enregistré le : 05 nov. 2015 07:48

Re: 1er Batch pour un novice

Message par pleaseTellMeWhoIam »

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"))
fme92b700101_1
fme92b700101
fme92b700101-001_1
fme92b700101-001
fme92b700101-002_1
fme92b700101-002
fme92b700101-003_1
fme92b700101-003
Le script doit se trouver parmis les dossiers à traiter

Code : Tout sélectionner

@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
KrosPj
Batcheur occasionnel
Messages : 5
Enregistré le : 09 déc. 2016 20:47

Re: 1er Batch pour un novice

Message par KrosPj »

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à.
pleaseTellMeWhoIam
Batcheur débutant
Messages : 10
Enregistré le : 05 nov. 2015 07:48

Re: 1er Batch pour un novice

Message par pleaseTellMeWhoIam »

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 ?
KrosPj
Batcheur occasionnel
Messages : 5
Enregistré le : 09 déc. 2016 20:47

Re: 1er Batch pour un novice

Message par KrosPj »

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.

Peux tu me donner un coup de main?


Je te remercie d'avance
pleaseTellMeWhoIam
Batcheur débutant
Messages : 10
Enregistré le : 05 nov. 2015 07:48

Re: 1er Batch pour un novice

Message par pleaseTellMeWhoIam »

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.

Code : Tout sélectionner

@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
KrosPj
Batcheur occasionnel
Messages : 5
Enregistré le : 09 déc. 2016 20:47

Re: 1er Batch pour un novice

Message par KrosPj »

Salut,

Super ton script fonctionne a la perfection. Je te remercie grandement pour ton aide.

J'ai un dernier service si tu as le temps et l'envie,

Pourrais tu me commenter ton script afin que je puisse mieux le comprendre et ainsi progresser dans ma compréhension des commande batch.


Merci beaucoup
Répondre