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 OrdnerD:\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_files
inD:\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)?