Verschieben Sie Dateien in einen Ordner, der nach einem Teil des Dateinamens benannt ist

539
Florian Frey

Ich habe Dateien von einer GoPro Fusion-Kamera, die Bilder und Filme darstellen. Die Dateinamen sehen so aus

GP (für "GoPro")  (zwei weitere Buchstaben ohne besondere Bedeutung)  (eine Ziffernfolge; möglicherweise vier oder sechs Ziffern)  .  (eine Periode)  (eine Verlängerung)

Einige der Erweiterungen sind häufig diejenigen, wie JPG, MP4, und WAV; andere sind ungewöhnlich. Einige Beispiel - Dateinamen sind GPFR0000.jpg, GPBK0000.jpg, GPFR0000.gpr, GPFR1153.MP4, GPFR1153.THMund GPBK142857.WAV. Aber die Erweiterungen sind für diese Frage nicht relevant.

Für jedes Bild und jeden Film gibt es eine Reihe von Dateien, deren Namen die gleiche Ziffernfolge direkt vor der Erweiterung haben. So zum Beispiel, GPFR1153.LRVund GPBK1153.MP4 gehören zu dem gleichen Satz.

Ich möchte, dass alle Dateien aus jedem Satz in einem Verzeichnis zusammengefasst werden, auf dessen Namen GPdie Ziffernfolge folgt. Zum Beispiel, wenn ich habe

GPFR0000.jpg GPBK0000.jpg GPFR0000.gpr GPFR0000.gpr GPFR1153.LRV GPFR1153.MP4 GPFR1153.THM GPBK1153.WAV GPBK1153.MP4 GPQZ142857.FOO 

alles in einem Verzeichnis sollte das Ergebnis sein

GP0000\GPFR0000.jpg GP0000\... GP1153\GPFR1153.LRV GP1153\GPFR1153.MP4 GP1153\... GP142857\GPQZ142857.FOO 

Wäre dies mit einem Skript möglich (für Windows 10)? Ich habe dieses (PowerShell) Skript von mousio unter Rekursiv Verschieben von Tausenden von Dateien in Unterordner-Fenstern gefunden, aber es spricht ein etwas anderes Problem an, und ich möchte helfen, es an meine Anforderungen anzupassen (ich bin ein Künstler, kein Programmierer).

# if run from "P:\Gopro\2018", we can get the image list $images = dir *.jpg  # process images one by one foreach ($image in $images) { # suppose $image now holds the file object for "c:\images\GPBK1153.*"  # get its file name without the extension, keeping just "GPBK1153" $filenamewithoutextension = $image.basename  # group by 1 from the end, resulting in "1153" $destinationfolderpath =  $filenamewithoutextension -replace '(....)$','\$1'  # silently make the directory structure for "1153 GPBK1153" md $destinationfolderpath >$null  # move the image from "c:\images\1234567890.jpg" to the new folder "c:\images\1\234\567\890\" move-item $image -Destination $destinationfolderpath  # the image is now available at "P:\Gopro\2018\1153\GPBK1153.*" } 
2
(1) Ihr Skript zeigt Dateinamen an, die wie Windows-Dateinamen aussehen. Laufen Sie Windows? Bitte [bearbeiten] Sie die Frage, um dies zu sagen, indem Sie die Version sowohl im Hauptteil der Frage als auch in den Tags angeben. (2) Sie sagen, Ihre Dateien folgen einem Muster, und Sie zeigen einige Beispiele, erklären es jedoch nicht. Sie zeigen Dateinamen mit vier Buchstaben, vier Ziffern, einem Punkt und einer Erweiterung mit drei Buchstaben an. Ist das Muster, dass alle Dateien mit den gleichen vier Ziffern zusammenhängen? Also `BLUE1742.FOO` und` IRON1742.BAR` passen zusammen? … (Fortsetzung) Scott vor 5 Jahren 0
(Fortsetzung)… (3) Bitte erläutern Sie das gewünschte Ergebnis. (Ihr Fragetitel verweist auf Ihre Ziele, aber Sie geben keine Details an.) (4) Woher haben Sie das Skript? Wenn jemand anderes es geschrieben hat, müssen Sie die Quelle identifizieren. (5) Wo ist der Rest des Skripts? Sie zeigen ein `{` aber kein `}`, also fehlt Ihnen ein Teil. (6) Was ist deine Frage? (7) Warum bitten Sie den Autor des Skripts nicht um Hilfe? …………………………………………………………………………………………… Bitte antworten Sie nicht in Kommentaren; Bearbeiten Sie Ihre Frage, um sie klarer und vollständiger zu machen. Scott vor 5 Jahren 0
(1) Ja Win 10 (2) Ja 4 Ziffern in seltenen Fällen mehr (6) (3) eine Ordnerstruktur, die jeden Bildsatz mit dem benannten Ordner nach Ziffern enthält (4), (5) Quelle wurde hinzugefügt. Sorry (6) Könnten Sie helfen? Ich mache dieses Skript (7) und weiß nicht warum. Ich dachte einfach, dass dies der richtige Weg ist, da es auch viele andere Leute gibt, die diese Camere benutzen und dieses Problem lösen müssen. Es tut mir leid, dass ich das gegoogelt habe und versucht habe, Antworten zu finden ... bitte nicht beleidigt werden. Ich kann dies natürlich löschen, wenn dies nicht der richtige ist Florian Frey vor 5 Jahren 0
Ich war nicht beleidigt. Es tut mir leid, wenn ich Ihnen diesen Eindruck vermittelt habe. Das Problem ist, dass wir Ihre Gedanken nicht lesen können und Ihre Frage nicht beantworten können, wenn wir nicht verstehen, was Sie wollen. Das Kopieren von etwas, das von jemand anderem geschrieben wurde, ohne den ursprünglichen Autor zu identifizieren, auch innerhalb der [SE] -Familie, gilt als Plagiat und ist strengstens verboten. … (Fortsetzung) Scott vor 5 Jahren 0
(Fortsetzung)… Ich bin zwar nicht beleidigt, aber ich bin frustriert, weil ich Sie gefragt habe, welches Ergebnis Sie wollten, und Sie haben mir zwei verschiedene Antworten gegeben. In Ihrem Kommentar heißt es, Sie möchten, dass Dateien in ein Verzeichnis (Ordner) verschoben werden, dessen Name die Ziffern des Dateinamens sind, und die in das Skript gesetzten Beispielkommentare besagen, dass Dateien `` `GPBK1153. *` `` In ein Verzeichnis verschoben werden sollen "1153". In Ihren Beispielen am Anfang der Frage sagen Sie jedoch, dass der Verzeichnisname "GP1152" sein sollte. (Und die Tatsache, dass Sie von "1152" auf "1153" gewechselt sind, hat mich für einen Moment verwirrt.)… (Fortsetzung) Scott vor 5 Jahren 0
(Fortsetzung)… Ich habe angenommen, dass der Verzeichnisname `` GP`` gefolgt von den Ziffern sein soll. lass es mich wissen, wenn das falsch ist. ** Update: ** Ich habe eine große Änderung an Ihrer Frage vorgenommen. Lassen Sie mich wieder wissen, ob ich etwas falsch gemacht habe. Scott vor 5 Jahren 0

1 Antwort auf die Frage

0
Scott

Aufgrund meines (möglicherweise fehlerhaften) Verständnisses dessen, was Sie möchten, können Sie dies mit dem folgenden PowerShell-Skript tun. Beachten Sie, dass dies von einer Arbeit von mousio stammt, die unter Rekursiv tausende Dateien in Unterordner-Fenster verschoben wird .

# If run from "P:\Gopro\2018", we can get the file list. $images = dir GP*  # Process files one by one. foreach ($image in $images) { # Suppose $image now holds the file object for "P:\Gopro\2018\GPBK1153.FOO"  # Get its file name without the extension, keeping just "GPBK1153". $filenamewithoutextension = $image.basename  # Grab the first two characters (which we expect to be "GP"), # skip the next two characters (which we expect to be letters; e.g., "BK"), # then grab all the characters after that (which we expect to be digits; e.g., "1153") # and put them together, resulting in "GP1153". $destinationfolderpath =  $filenamewithoutextension -replace '(..)..(.*)','$1$2'  # Silently make the directory structure for "GP1153". md $destinationfolderpath > $null 2>&1  # Move the file from "P:\Gopro\2018\GPBK1153.FOO" to the new folder "P:\Gopro\2018\GP1153" move-item $image -Destination $destinationfolderpath  # The file is now available at "P:\Gopro\2018\GP1153\GPBK1153.FOO". }