Wie kann ich Dateien am effizientesten verschieben, umbenennen und diese Aktion protokollieren?

Ich habe die folgende CSV-Liste (in Wirklichkeit 1000 Zeilen):

needle,code
123456,AB
121212,BB
33333333,CVV

Und ich habe ein Verzeichnis C:\old_files) enthält PDF-Dateien (wieder 1000 in der Realität):

dsadsadsa.343222.dsads23213jkjl.saddsa.pdf
dsadsadsa.123456.dsads23213jkjl.saddsa.pdf
dsadsadsa.111111.dsads23213jkjl.saddsa.pdf
dsadsadsa.33333333.dsads23213jkjl.saddsa.pdf
dsadsadsa.33333333.fsdgdsfdsfdsf.dsad.pdf

Für jede Nadel in der CSV:

Ich muss sehen, ob es ein PDF gibt, das diese Nadel enthält (es gibt möglicherweise 0 oder mehr Übereinstimmungen)Wenn es eine Übereinstimmung gibt, muss ichrstellen Sie eine Kopie der Datei in einem separaten Ordner D:\new_files)Nennen Sie die kopierte Datei um, indem Sie den entsprechenden Code vor den Namen @ stelle Schreiben Sie einen Eintrag in das Protokoll.

Für das Beispiel habe ich eine Übereinstimmung für123456 und 2 für33333333, also muss ich eine Kopie dieser Dateien in @ verschiebD:\new_files und benenne sie um in:

AB.dsadsadsa.123456.dsads23213jkjl.saddsa.pdf
CVV.dsadsadsa.33333333.dsads23213jkjl.saddsa.pdf
CVV.dsadsadsa.33333333.fsdgdsfdsfdsf.dsad.pdf

Das Logfile würde so aussehen (formatneedle,code,oldfilepath,newfilepath):

123456,AB,C:\old_files\dsadsadsa.123456.dsads23213jkjl.saddsa.pdf,D:\new_files\AB.dsadsadsa.123456.dsads23213jkjl.saddsa.pdf
33333333,CVV,C:\old_files\dsadsadsa.33333333.dsads23213jkjl.saddsa.pdf,D:\new_files\CVV.dsadsadsa.33333333.dsads23213jkjl.saddsa.pdf
33333333,CVV,C:\old_files\dsadsadsa.33333333.fsdgdsfdsfdsf.dsad.pdf,D:\new_files\CVV.dsadsadsa.33333333.fsdgdsfdsfdsf.dsad.pdf

Es ist wichtig, dass ich die Dateien im Verzeichnis nur einmal durchlaufe, da alle Dateien in einem @ durchlaufen werdeForEach Schleife für jedesneedle dauert viel zu lange. Dank diesem Forum erstelle ich eine Hash-Tabelle:

$pairs = @{}
Import-CSV .\data.csv | ForEach-Object { $pairs[$_.needle] = $_.code+"." }

Get-ChildItem "C:\old_files" | Rename-Item -NewName { "D:\new_files\" + $pairs[$_.Name.Split('.')[1]] + $_.Name }

Mein erstes Problem hier: Ich kann die Datei nicht in den neuen Ordner verschieben.

Q1 Wie kopiere ich eine Datei richtig vonC:\old_filesinD:\new_files und umbenennen?

Mein zweites Problem: Ich verstehe nicht, wie ich dem obigen Code Code hinzufügen kann.

Q2 Wie kann ich die Protokolldatei für jede Übereinstimmung erstellen (und daher: kopierte und umbenannte Datei)?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage