Kann ich in Windows viele Dateien aus vielen separaten Unterverzeichnissen/Ordnern stapelweise in ein einziges Hauptverzeichnis/Ordner verschieben?

Kann ich in Windows viele Dateien aus vielen separaten Unterverzeichnissen/Ordnern stapelweise in ein einziges Hauptverzeichnis/Ordner verschieben?

Ich habe jede Menge Dateien an Orten wie diesem:

C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1)/(filename1).ext

.../(filename2)/(filename2).ext

.../(filename3)/(filename3).ext

Ich versuche, die .extDateien stapelweise in den übergeordneten Ordner zu verschieben, sodass es folgendermaßen aussieht:

C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1).ext

Dadurch wird der Unterordner im Wesentlichen überflüssig, ähnlich wie beim Herausnehmen von Trennblättern aus einem Schulordner.

Antwort1

Möglicherweise müssen Sie dies mitcygwin, was ich jedem empfehlen würde, der (immer noch??) die M$ Windoze-Spyware verwendet.

So etwas sollte funktionieren. Führen Sie es im Verzeichnis aus C:/Users/(Username)/Desktop/(Parent-Collection name)/(das in Cygwin wie folgt bezeichnet würde /cygdrive/c/Users/(Username)/Desktop/(Parent-Collection name)/):

for i in `find . -name "*" -type f`; 
    do mv $i `echo $i | sed 's/.*\/\([^/]*\)/\1/'`; 
done

(Parent-Collection name)Dadurch werden alle Dateien in allen Verzeichnissen darunter nach verschoben (Parent-Collection name). Genauer gesagt handelt es sich dabei um eine doSchleife, bei der der Index ialle Dateien vom aktuellen Verzeichnis abwärts durchläuft. Das ist es, was der findBefehl auflistet. Sie können die Syntax nachschlagen, indem Sie ausführen man find. Anschließend führen Sie aus, um mvdiese Datei ( $i) an den neuen Speicherort zu verschieben (). Dieser neue Speicherort wird durch den ursprünglichen Dateinamen () angegeben, der echo $idurch den Stream-Editor ( sed, den Sie mit nachschlagen können man sed) ausgeführt wird, der so eingestellt ist, dass der Pfad entfernt wird und der Basisdateiname übrig bleibt.

Ich schlage vor, es zu testen (erstellen Sie ein Verzeichnis mit einigen Unterverzeichnissen, die leere Textdateien oder etwas Ähnliches enthalten) und stellen Sie sicher, dass Sie ein Backup haben!

Anschließend möchten Sie möglicherweise alle (jetzt leeren) Verzeichnisse unterhalb Ihres aktuellen Verzeichnisses entfernen:

for i in `find . -name "*" -type d`; 
    do rmdir $i; 
done

Der einzige Unterschied besteht darin, dass Sie angeben, nach Verzeichnissen ( ) statt nach Dateien ( ) findzu suchen und diese Verzeichnisse dann zu entfernen ( , was nur bei leeren Verzeichnissen funktioniert).-type d-type frmdir

Ist Linux nicht cool? Cygwin bietet Ihnen einige der Leistungsmerkmale von Linux und könnte ein erster Schritt sein, um Sie so vertraut damit zu machen, dass Sie eines Tages vielleicht sogar den Mut finden, auf etwas wie Ubuntu umzusteigen. :)

Antwort2

Dies kann mit Powershell durchgeführt werden, obwohl wir nicht wissen, welche Windows-Version Sie verwenden.

$sourcefolder = "C:\Users\username\Desktop\ParentCollectionName"

$allfiles = Get-ChildItem -Recurse $sourcefolder | Where-Object {$_.PSIScontainer -eq $false}
ForEach ($file in $allfiles)
    {
        $destinationfolder = Split-Path -Parent $file.Directory.FullName
        Move-Item $file.FullName $destinationfolder
    }

Alle Dateien in den Unterverzeichnissen $sourcefolderwerden in den ParrentCollectionNameOrdner verschoben. Anschließend können Sie die leeren Unterordner löschen.

Quelle

verwandte Informationen