Kopieren Sie Verzeichnisse, deren Namen mit TXT-Dateien übereinstimmen
-
26-12-2019 - |
Frage
Ich versuche, eine Reihe von Verzeichnissen zu kopieren.Ich habe Textdateien mit einem ähnlichen Namen und muss die Verzeichnisse diesen Textdateien zuordnen, um zu bestimmen, welche Verzeichnisse kopiert werden sollen.
Das habe ich getan und ich weiß nicht, wie ich das Problem beheben kann.Ich drehe mich im Kreis.
$destination = "..\..\$args\Images\"
$txtfiles = Get-ChildItem $destination -Include *.txt
$source = "..\..\..\Images\" | ?{ $_.PSIsContainer } | Where-Object { $_.Name -Like "*$txtfiles*" } | Copy-Item $destination
Ein Beispiel für eine TXT-Datei: 1e03655b-0aac-48b2-82f3-75942084af7a.txt
und Ordner: name.1e03655b-0aac-48b2-82f3-75942084af7a
Ich muss also die Ordner finden, die den TXT-Dateien entsprechen, und den Ordner in das TXT-Dateiverzeichnis kopieren.
Danke
Lösung
Sie möchten die BaseName-Eigenschaften dieser Textdateien erweitern (um den TXT-Teil abzuschneiden) und über ein Array von Zeichenfolgen verfügen, z. B.:
1e03655b-0aac-48b2-82f3-75942084af7a
1e03655b-0aac-48b2-82f3-75942084af7b
1e03655b-0aac-48b2-82f3-75942084af8g
1e03655b-0aac-48b2-82f3-75942084afba
Dann Ihr $source =
Zeile muss eine Verzeichnisliste abrufen und nicht nur eine Zeichenfolge durch die Pipeline weiterleiten. Dann würde ich vorschlagen, die Verzeichnisnamen mit einer Regex-Übereinstimmung abzugleichen und zu prüfen, ob diese Übereinstimmung vorhanden ist -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}}