Kurze Antwort
Wenn das aktuelle Verzeichnis Bilder enthält, deren Dateinamen demselben Muster folgen DSC_XXXX.jpg
(wo XXXX
eine Zahl ist) und eine Datei, Technical.txt
die einige dieser Nummern enthält, würde der folgende Befehl Technical
alle Dateien in den Ordner kopieren (sofern er im aktuellen Verzeichnis vorhanden ist) Eine Nummer steht in der Technical.txt
Datei:
Get-Content Technical.txt | ForEach-Object { Copy-Item "DSC_$_.jpg" Technical }
Wenn sich die Technical.txt
Dateien und die Bilddateien und das Technical
Verzeichnis nicht im aktuellen Verzeichnis befinden, müssen vollständige oder relative Pfade angegeben werden, zum Beispiel:
Get-Content c:\path1\to\Technical.txt | ForEach-Object { Copy-Item "c:\path2\to\pictures\DSC_$_.jpg" c:\path3\to\Technical }
Erläuterung
- Der
"DSC_$_.jpg"
Ausdruck im Befehl wird verwendet, um den Namen der Bilddatei aus der Nummer zu generieren, die aus derTechnical.txt
Datei gelesen wurde, dh dem aktuellen Pipeline-Objekt (dh$_
). Es wird einfachDSC_
als Präfix und.jpg
als Erweiterung hinzugefügt. - Get-Content liest den Inhalt der
Technical.txt
Datei. - ForEach-Object führt seine Skriptblockargumente (in geschweiften Klammern eingeschlossen
{}
) für jedes Objekt in der Pipeline aus. In diesem Fall wird jede Textzeile von zurückgegebenGet-Content
.
Testen dieser Lösung (online oder lokal)
Am einfachsten ist es, diese Lösung online auszuprobieren .
Andernfalls kann das folgende Snippet verwendet werden, um im aktuellen Verzeichnis einen test
Ordner mit einer Beispieldatei Technical.txt
und gefälschten Bilddateien gemäß dem in dieser Antwort genannten Muster und einem leeren Technical
Verzeichnis zu erstellen ( Vorsicht : Sie müssen .\test
zu etwas anderem wechseln, wenn Sie dies bereits tun habe einen test
Ordner im Arbeitsverzeichnis:
mkdir -ErrorAction SilentlyContinue .\test\Technical Out-File .\test\DSC_4811.jpg; Out-File .\test\DSC_4812.jpg; Out-File .\test\DSC_4813.jpg; Out-File .\test\DSC_4814.jpg; Out-File .\test\DSC_4819.jpg; Out-File .\test\DSC_4820.jpg; "4811`n4819`n4820" > .\test\Technical.txt
(In der dritten Zeile steht `n
ein Zeilenendezeichen (der hintere Haken ( `
) ist ein Escape-Zeichen in PowerShell).
Es generiert die folgenden Dateien:
.\test\DSC_4811.jpg .\test\DSC_4812.jpg .\test\DSC_4813.jpg .\test\DSC_4814.jpg .\test\DSC_4819.jpg .\test\DSC_4820.jpg .\test\Technical.txt
Nachdem der als Antwort bereitgestellte Befehl ausgeführt wurde ( Get-Content .\test\Technical.txt | ForEach-Object { Copy-Item ".\test\DSC_$_.jpg" .\test\Technical }
), lauten die Dateien:
.\test\DSC_4811.jpg .\test\DSC_4812.jpg .\test\DSC_4813.jpg .\test\DSC_4814.jpg .\test\DSC_4819.jpg .\test\DSC_4820.jpg .\test\Technical.txt .\test\Technical\DSC_4811.jpg .\test\Technical\DSC_4819.jpg .\test\Technical\DSC_4820.jpg
Aufräumen:
ri -Recurse .\test