Kurze Antwort
Wenn das aktuelle Verzeichnis Bilder enthält, deren Dateinamen demselben Muster folgen DSC_XXXX.jpg(wo XXXXeine Zahl ist) und eine Datei, Technical.txtdie einige dieser Nummern enthält, würde der folgende Befehl Technicalalle Dateien in den Ordner kopieren (sofern er im aktuellen Verzeichnis vorhanden ist) Eine Nummer steht in der Technical.txtDatei:
Get-Content Technical.txt | ForEach-Object { Copy-Item "DSC_$_.jpg" Technical } Wenn sich die Technical.txtDateien und die Bilddateien und das TechnicalVerzeichnis 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.txtDatei gelesen wurde, dh dem aktuellen Pipeline-Objekt (dh$_). Es wird einfachDSC_als Präfix und.jpgals Erweiterung hinzugefügt. - Get-Content liest den Inhalt der
Technical.txtDatei. - 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 testOrdner mit einer Beispieldatei Technical.txtund gefälschten Bilddateien gemäß dem in dieser Antwort genannten Muster und einem leeren TechnicalVerzeichnis zu erstellen ( Vorsicht : Sie müssen .\testzu etwas anderem wechseln, wenn Sie dies bereits tun habe einen testOrdner 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 `nein 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