Copiez les répertoires lorsque leur nom correspond - Comme les fichiers txt
-
26-12-2019 - |
Question
J'essaie de copier un tas de répertoires.J'ai des fichiers texte qui portent un nom similaire et je dois faire correspondre les répertoires à ces fichiers texte pour déterminer les répertoires à copier.
C'est ce que j'ai fait et je n'arrive pas à comprendre comment y remédier.Je tourne en rond.
$destination = "..\..\$args\Images\"
$txtfiles = Get-ChildItem $destination -Include *.txt
$source = "..\..\..\Images\" | ?{ $_.PSIsContainer } | Where-Object { $_.Name -Like "*$txtfiles*" } | Copy-Item $destination
Un exemple de fichier txt : 1e03655b-0aac-48b2-82f3-75942084af7a.txt
et dossier : name.1e03655b-0aac-48b2-82f3-75942084af7a
Je dois donc trouver les dossiers qui correspondent aux fichiers txt et copier le dossier dans le répertoire des fichiers txt.
Merci
La solution
Vous souhaitez développer les propriétés BaseName de ces fichiers texte (pour couper la partie .txt) et disposer d'un tableau de chaînes tel que :
1e03655b-0aac-48b2-82f3-75942084af7a
1e03655b-0aac-48b2-82f3-75942084af7b
1e03655b-0aac-48b2-82f3-75942084af8g
1e03655b-0aac-48b2-82f3-75942084afba
Alors votre $source =
La ligne doit extraire une liste de répertoires et pas seulement diriger une chaîne dans le pipeline, puis je suggérerais de faire correspondre les noms de répertoires avec une correspondance d'expression régulière et de vérifier si cette correspondance est -in $txtfiles
.
$destination = "..\..\$args\Images\"
$txtfiles = Get-ChildItem $destination -Filter *.txt | Select -ExpandProperty BaseName
$source = "..\..\..\Images\"
GCI $source -Directory | ?{ $_.Name -match "(\w{8}-\w{4}-\w{4}-\w{4}-\w{12})$" } | %{If($Matches[1] -in $txtfiles){Copy-Item $_.FullName $destination}}