Question
Recherche mots-clés dans le nom d'un fichier
- Speed83
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 12
- Remerciements reçus 0
il y a 9 ans 5 mois #22531
par Speed83
Recherche mots-clés dans le nom d'un fichier a été créé par Speed83
Bonjour,
Je souhaite réaliser une recherche dans le nom d'un fichier avec des mots-clés contenu dans un fichier texte.
Si le nom de fichier contient un des mots-clés alors je souhaite copier le fichier dans un répertoire précis.
Les mots-clés seront organisés par ligne avec à chaque fin de ligne le répertoire cible.
Ce fichier texte contenant les mots-clés sera de ce type:
mot-cle1, motcle2, motcle3,... dossier:c:\docs\1
mot-cle1, motcle2, motcle3,... dossier:c:\docs\2
Je commence déjà à essayer de pouvoir faire matcher les mots contenus dans le nom du fichier avec les mots-clés contenus dans le fichier mais je bloque
Je pensai pouvoir réaliser cela avec un select-String qui pourrait en plus me renvoyer le numéro de la ligne et ainsi récupérer par la suite le chemin du répertoire pour la copie.
Voici un exemple de mon code :
[code:1]$FichierMotCle = 'c:\docs\FichierMotCle.txt'
$NomFichCible = $Fichier.Name.ToString()
$test = Select-String $FichierMotCle -Pattern $NomFichCible[/code:1]
Je n'arrive pas à utiliser les mots-clés contenus dans le fichier.
De plus, avec l'option -Pattern d'après ce que j'ai testé, il faut que le nom du fichier contienne la totalité des mots clés alors que je souhaiterai que si un seul mot-clé correspond alors je copie le fichier.
J'ai également réalisé des tests avec [code:1]Get-Content $FichierMotCle | Where-Object {$_.name -match $NomFichCible}[/code:1] mais je n'y arrive pas également.
Si vous une idée pour m'aiguiller, je suis preneur !
Par avance, merci pour aide.
Je souhaite réaliser une recherche dans le nom d'un fichier avec des mots-clés contenu dans un fichier texte.
Si le nom de fichier contient un des mots-clés alors je souhaite copier le fichier dans un répertoire précis.
Les mots-clés seront organisés par ligne avec à chaque fin de ligne le répertoire cible.
Ce fichier texte contenant les mots-clés sera de ce type:
mot-cle1, motcle2, motcle3,... dossier:c:\docs\1
mot-cle1, motcle2, motcle3,... dossier:c:\docs\2
Je commence déjà à essayer de pouvoir faire matcher les mots contenus dans le nom du fichier avec les mots-clés contenus dans le fichier mais je bloque
Je pensai pouvoir réaliser cela avec un select-String qui pourrait en plus me renvoyer le numéro de la ligne et ainsi récupérer par la suite le chemin du répertoire pour la copie.
Voici un exemple de mon code :
[code:1]$FichierMotCle = 'c:\docs\FichierMotCle.txt'
$NomFichCible = $Fichier.Name.ToString()
$test = Select-String $FichierMotCle -Pattern $NomFichCible[/code:1]
Je n'arrive pas à utiliser les mots-clés contenus dans le fichier.
De plus, avec l'option -Pattern d'après ce que j'ai testé, il faut que le nom du fichier contienne la totalité des mots clés alors que je souhaiterai que si un seul mot-clé correspond alors je copie le fichier.
J'ai également réalisé des tests avec [code:1]Get-Content $FichierMotCle | Where-Object {$_.name -match $NomFichCible}[/code:1] mais je n'y arrive pas également.
Si vous une idée pour m'aiguiller, je suis preneur !
Par avance, merci pour aide.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 9 ans 5 mois #22532
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Recherche mots-clés dans le nom d'un fichier
Salut,
si tu peux créer un objet à partir de ton fichier ce sera déjà plus simple(cf. Import-CSV).
Pour select-string c'est l'inverse, -Pattern contient les mot recherchés.
Ils peuvent être une alternative '(MotClé1|MotClé2|MotClé3' que l'on peut construire ainsi :
[code:1]
$ofs='|'
$TableauKeys=@('MotClé1','MotClé2','MotClé3')
$TableauKeys
$Pattern=\"$TableauKeys\"
$Pattern
[/code:1]
Ensuite il faut savoir si tes mot clés peuvent contenir des métacaractères des regex, si oui il faut les échapper ([regex]:Escape($Motclé) )<br><br>Message édité par: Laurent Dardenne, à: 22/10/16 14:45
si tu peux créer un objet à partir de ton fichier ce sera déjà plus simple(cf. Import-CSV).
Pour select-string c'est l'inverse, -Pattern contient les mot recherchés.
Ils peuvent être une alternative '(MotClé1|MotClé2|MotClé3' que l'on peut construire ainsi :
[code:1]
$ofs='|'
$TableauKeys=@('MotClé1','MotClé2','MotClé3')
$TableauKeys
$Pattern=\"$TableauKeys\"
$Pattern
[/code:1]
Ensuite il faut savoir si tes mot clés peuvent contenir des métacaractères des regex, si oui il faut les échapper ([regex]:Escape($Motclé) )<br><br>Message édité par: Laurent Dardenne, à: 22/10/16 14:45
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Speed83
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 12
- Remerciements reçus 0
il y a 9 ans 5 mois #22533
par Speed83
Réponse de Speed83 sur le sujet Re:Recherche mots-clés dans le nom d'un fichier
Bonjour Laurent,
Merci pour l'aide !
En effet avec Import-csv je commence à obtenir quelque chose.
Je continue de creuser à partir de ces infos.
Merci
Merci pour l'aide !
En effet avec Import-csv je commence à obtenir quelque chose.
Je continue de creuser à partir de ces infos.
Merci
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 9 ans 5 mois #22534
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Recherche mots-clés dans le nom d'un fichier
une suite possible, brut de fonderie:
[code:1]
\"$(
$T[0].psobject.Properties|
Where-Object {$_.name -like '*motcle*'}|
Foreach-Object {[regex]::Escape($_.value)}
)\"
[/code:1]
Où $T est le résultat d'Import-csv.
On recherche les propriété dont le nom est motclé, on récupère sa valeur, on échappe son contenu, enfin on transforme le tableau en une alternative.
Tu peux aussi utiliser l'opérateur -F
[code:1]
'{0}|{1}|{2}' -F $T[0].Motcle1,$T[0].Motcle2,$T[0].Motcle3
[/code:1]
[code:1]
\"$(
$T[0].psobject.Properties|
Where-Object {$_.name -like '*motcle*'}|
Foreach-Object {[regex]::Escape($_.value)}
)\"
[/code:1]
Où $T est le résultat d'Import-csv.
On recherche les propriété dont le nom est motclé, on récupère sa valeur, on échappe son contenu, enfin on transforme le tableau en une alternative.
Tu peux aussi utiliser l'opérateur -F
[code:1]
'{0}|{1}|{2}' -F $T[0].Motcle1,$T[0].Motcle2,$T[0].Motcle3
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Speed83
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 12
- Remerciements reçus 0
il y a 9 ans 5 mois #22535
par Speed83
Réponse de Speed83 sur le sujet Re:Recherche mots-clés dans le nom d'un fichier
Hoo merci, j'avoue que là comme ça je ne sais pas trop comment utiliser ce code
.
Sinon j'ai commencé à avancer avec le import-csv :
[code:1] $csvImport = Import-Csv .\test.csv
ForEach ($item in $csvImport) {
$MT1 = $item.MT1
$MT2 = $item.MT2
$MT3 = $item.MT3
$MT4 = $item.MT4
$MT5 = $item.MT5
$DOSS = $item.DOSS
}
$ofs='|'
$TableauKeys=@($MT1,$MT2,$MT3,$MT4,$MT5)
#$TableauKeys
$Pattern=\"$TableauKeys\"
}
$test2 = Select-String $test3 -Pattern $Pattern
[/code:1]
$test3 est une variable pointant vers un fichier texte ou je récupère tous les noms des fichiers.
Je ne sais pas si mon code est très cohérent...
Sinon j'ai commencé à avancer avec le import-csv :
[code:1] $csvImport = Import-Csv .\test.csv
ForEach ($item in $csvImport) {
$MT1 = $item.MT1
$MT2 = $item.MT2
$MT3 = $item.MT3
$MT4 = $item.MT4
$MT5 = $item.MT5
$DOSS = $item.DOSS
}
$ofs='|'
$TableauKeys=@($MT1,$MT2,$MT3,$MT4,$MT5)
#$TableauKeys
$Pattern=\"$TableauKeys\"
}
$test2 = Select-String $test3 -Pattern $Pattern
[/code:1]
$test3 est une variable pointant vers un fichier texte ou je récupère tous les noms des fichiers.
Je ne sais pas si mon code est très cohérent...
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 9 ans 5 mois #22536
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Recherche mots-clés dans le nom d'un fichier
Speed83 écrit:
[code:1]
'{0}|{1}|{2} etc' -F $item.MT1,$item.MT2,$item.MT3 etc
[/code:1]
'etc' est à compléter : {3} $item.MT4
Speed83 écrit:
Déjà ta boucle Foreach sur les objets issus du csv doit contenir le traitement sinon ton alternative $Pattern=\"$TableauKeys\" ne contiendra que le dernier objet.
Le mieux est d'écrire le code d'un seul cas (un seul objet issu du csv) et de le compléter au fur et à mesure. Ainsi tu sauras ce qu'il te faut faire exactement.
Une fois qu'il fonctionne tu modifies ton code pour traiter tous les objets. Si tu crées une fonction pour traiter UN objet le code cela te sera plus facile à modifier :
import-csv
New-Alternative
Cherche
Traite le résultat
oui c'est pour cela que je t'ai indiqué une approche + simple :je ne sais pas trop comment utiliser ce code
.
[code:1]
'{0}|{1}|{2} etc' -F $item.MT1,$item.MT2,$item.MT3 etc
[/code:1]
'etc' est à compléter : {3} $item.MT4
Speed83 écrit:
Il te faut un jeux de test pour le savoir.Je ne sais pas si mon code est très cohérent...
Déjà ta boucle Foreach sur les objets issus du csv doit contenir le traitement sinon ton alternative $Pattern=\"$TableauKeys\" ne contiendra que le dernier objet.
Le mieux est d'écrire le code d'un seul cas (un seul objet issu du csv) et de le compléter au fur et à mesure. Ainsi tu sauras ce qu'il te faut faire exactement.
Une fois qu'il fonctionne tu modifies ton code pour traiter tous les objets. Si tu crées une fonction pour traiter UN objet le code cela te sera plus facile à modifier :
import-csv
New-Alternative
Cherche
Traite le résultat
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.051 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Recherche mots-clés dans le nom d'un fichier