So verschieben Sie Dateien mit einer bestimmten Dateierweiterung aus einem übergeordneten Ordner sowie dessen Unterordner in einen neuen Ordner

1281
Nevermind Susan

Ich möchte alle Dateien mit den folgenden Erweiterungen verschieben: .JPEG .MP3 .MP4 .MOV .AVI .PDF .PSD .WAV .TXT

... zu neuen übergeordneten Ordnern, die nach der Erweiterung der darin enthaltenen Dateien benannt sind. Derzeit habe ich zu viele Dateien in so vielen Unterordnern (unter einem übergeordneten Ordner), dass dies manuell durchgeführt werden kann. Ich habe versucht, den übergeordneten Ordner mit * zu durchsuchen, um dann nach Dateityp zu sortieren. Dies ist jedoch zu viel und mein System friert ein oder ist unbrauchbar / langsam. Ich gehe davon aus, dass ich nichts über Scripts / Batch-Dateien weiß, aber ich kann den Anweisungen folgen, kopieren und einfügen;) Bitte beraten Sie.

0
Sie könnten 'find' verwenden, wenn Sie dieses Q markiert haben, aber eine bessere Idee ist die Verwendung von 'tar', das über Schalter verfügt, die dies unterstützen. Der klassische Aufruf ist (im oberen Teil des Quellbaums) `tar cf - | (cd target; tar xf -) `kopiert den gesamten Baum. Sie möchten auf der `man`-Seite nach Ihrem` tar` suchen, um nur die gewünschten Dateien auszuwählen. MAP vor 7 Jahren 0
Ups, das ist ein Tippfehler beim `tar`-Befehl, sollte` tar cf - sein. | (cd target; tar xf -) `(muss etwas zum tar up sagen. MAP vor 7 Jahren 0
Welches Betriebssystem verwendest du? Jonatan Öström vor 7 Jahren 1
Bitte beachten Sie, dass [SU] kein Skriptschreibservice ist. Wenn Sie uns sagen, was Sie bisher versucht haben (einschließlich der von Ihnen verwendeten Skripts) und wo Sie stecken bleiben, können wir versuchen, bei bestimmten Problemen zu helfen. Sie sollten auch lesen [Wie kann ich eine gute Frage stellen?] (Https://superuser.com/help/how-to-ask). DavidPostill vor 7 Jahren 0

2 Antworten auf die Frage

0
Nathan.Eilisha Shiraini

(Nach dem Bearbeiten und Kommentieren) Dieses Skript sollte dies einschließlich der Unterordner tun:

@echo off for \r %%f in (*) do ( if not exist %%~xf mkdir %%~xf move /y %%f %%~xf\%%~nf.%%~xf ) pause 

Wenn Sie noch nie ein Batch-Skript verwendet haben, funktioniert es folgendermaßen:

  1. Öffnen Sie den Editor ( nicht MS Word oder WordPad)
  2. Kopieren Sie das Skript und fügen Sie es ein
  3. Datei -> Speichern unter
  4. Wählen Sie im Dropdown-Menü "Typ" die Option "Alle Typen".
  5. Speichern Sie die Datei als something.bat(Sie können das ändern, somethingaber das .batmuss dort sein)
  6. Legen Sie die Datei in demselben Verzeichnis ab wie die Dateien, an denen sie arbeiten muss
  7. Doppelklicken Sie auf die Datei

Stellen Sie sicher, dass Sie es testen, bevor Sie es tatsächlich verwenden. Die pauseam Ende in nicht benötigt wird, wird es nur Sie aufgefordert, eine Taste zu drücken, bevor Sie das Fenster schließen.

Dies funktioniert fast, da es die Ordner mit den Dateinamenerweiterungen erstellt, aber nur Dateien mit entsprechenden Erweiterungen, die sich im selben Ordner wie die .bat-Dateien befinden, in die neu erstellten Ordner verschieben. Dateien, die sich in Unterverzeichnissen befinden, oder Dateien in Ordnern werden nicht verschoben. Ich müsste die .bat-Datei in jeden Unterordner (über 500) kopieren und einfügen, um alle Dateien nach der Erweiterung zu sortieren, wobei mir mehrere Ordner mit JPEG .MP3 usw. in jedem Unterordner zur Verfügung stehen. Gibt es eine Möglichkeit, es von einem Ordner aus ausführen zu lassen, in dem sich alle über 500 Ordner befinden, in denen sich die Dateien befinden? Nevermind Susan vor 7 Jahren 0
Das Batch-Skript wurde bearbeitet und sollte Unterordner enthalten. Entschuldigung, ich habe diesen Punkt in Ihrer Frage nicht gesehen Nathan.Eilisha Shiraini vor 7 Jahren 0
Der Inhalt der Unterordner ist noch nicht enthalten. Vielleicht mache ich etwas falsch. Bevor ich letzte Nacht eingeschlafen bin, habe ich im Stammordner (Sternchen-Punkt-Sternchen) alle Dateien (280.000 Dateien) extrahiert und danach die erstellten Stapeldateien verwendet, um sie in Dateien zu sortieren, die jedoch nicht erfolgreich waren. Die Ausführung der Stapeldatei zeigt, dass ein wiederholter Zugriff auf 0 Dateien verweigert wird. Ich bin als Admin angemeldet. und haben offen als Admin verwendet. sowie beim Öffnen der Batch-Datei. Irgendwelche Ideen? Vielen Dank für Ihre bisherige Hilfe. Nevermind Susan vor 7 Jahren 0
0
dcook

Ok, ich habe meinen Code korrigiert. Sie müssen zwei Dinge tun. Zunächst sollten Sie ein "directory_of_Files" haben, das alle Dateien und Unterordner mit Dateien enthält. Als nächstes sollten Sie einen neuen übergeordneten Ordner "new_parent_directory" haben, der leer ist. new_parent_directory wird nach den Dateiendungen der Dateien in "directory_of_Files" organisiert. Im Wesentlichen sucht dieses Skript nach allen Dateien in einem Verzeichnis und nach Verzeichnissen in diesem Verzeichnis. Dann erstellt es eine Liste der Dateiendungen, erstellt dann Verzeichnisse in einem neuen Verzeichnis, das auf diesen Dateiendungen basiert, und nimmt dann alle Daten in Anspruch die Dateien im übergeordneten Verzeichnis und verschieben sie in die neu erstellten Verzeichnisse.

Wenn Sie Python installiert haben .....

Geben Sie im Terminal ein

python 

dann,

import os 

dann,

#this is ths directory that contains all your files  #YOU MUST CHANGE THIS!!!!!! directory_of_Files = "/Users/name/Desktop/test1"  #AND YOU MUST CHANGE THIS!!!!!! new_parent_directory = "/Users/name/Desktop/newhometest"  #From here down, it's all magic.  all_subfolders = [x[0] for x in os.walk(directory_of_Files)]  #Get the full file name and only the files filenames=[] for subfolder in all_subfolders: os.chdir(subfolder) for file in filter(os.path.isfile, os.listdir(os.getcwd())): if not file.startswith("."): filenames.append(os.getcwd()+"/"+file)  #get the file endings all_files_endings = [] for i in filenames: all_files_endings.append(i.split(".",1)[1])  #remove the duplications all_files_endings = list(set(all_files_endings))  #create some folders in the new_directory with the file endings for fileExtensions in all_files_endings: os.mkdir(new_parent_directory + "/" + fileExtensions)   #move the files from their old destination to their new destination  newnames=[] for subfolder in all_subfolders: os.chdir(subfolder) for file in filter(os.path.isfile, os.listdir(os.getcwd())): if not file.startswith("."): newnames.append(new_parent_directory+"/"+file.split(".",1)[1]+"/"+file) print file  if len(filenames) == len(newnames): for i in range(len(filenames)): shutil.move(filenames[i], newnames[i]) 

Ich habe dies auf Mac OSX 10.11 mit Python 2.7 getestet. Sie können auch einfach den gesamten Code in eine Textdatei kopieren, als "something.py" speichern und ihn dann mit dem Code vom Terminal ausführen.

python something.py 
"Ich habe das nicht getestet" Bitte keinen ungetesteten Code posten ... DavidPostill vor 7 Jahren 0
Ich wusste nicht, dass Python auf einem Windows-Betriebssystem verwendet werden kann. Ich habe es heruntergeladen, habe aber keine Ahnung, wie Sie das, was Sie geantwortet haben, umsetzen. Nevermind Susan vor 7 Jahren 0
Danke David, ich kannte die Regeln nicht. Ja, Susan, Python ist nur eine weitere Skriptsprache. nichts Besonderes. Vielleicht ist es etwas schöner als andere Sprachen, weil es für Menschen lesbarer ist. Das von mir bereitgestellte Skript wird MOVE, nicht alle Dateien umbenennen. Wenn Sie nur umbenennen möchten, um ein Original-Backup an seinem alten Ort zu haben, ändern Sie die letzte Zeile in os.rename anstelle von shutil.move dcook vor 7 Jahren 0
Cook, ich führe nicht OSX oder Linux neben Windows 7 auf diesem Computer aus. Ich habe LinuxMint / WindowsXP auf einem anderen Desktop, aber dieser Laptop hat nur Windows7. Python ist zum Download für Windows7 verfügbar. Ich habe die Anwendung heruntergeladen und geöffnet, und die Cmd-Box wird geöffnet (ich denke, das Äquivalent von Terminal). Also habe ich Python eingetippt und die Eingabetaste gedrückt. Nevermind Susan vor 7 Jahren 0
Gibt es eine Möglichkeit, Screenshots zu meinen Kommentaren hinzuzufügen? Erstmalige Verwendung von Superuser Nevermind Susan vor 7 Jahren 0