Wie verschiebe ich jede Datei in einem Baum an die Wurzel des Baums?

10

Ich habe einen Ordner (nennen wir es A) mit vielen Unterordnern B, C, D, E, die dann wieder Unterordner B1, B2, B3, ... C1, C2, C3 ... haben.

Wie kann ich mit cmd alle Dateien aus allen Unterordnern in den "Stamm" -Ordner A verschieben?

Turm
quelle
Ich gehe davon aus, dass Sie jede Datei in einem Stamm haben möchten, nicht in Unterordnern? Also A \ File1, A \ File2, nicht A \ Folder2 \ File1?
Kanadier Luke
@ Luke - Ja, du hast es verstanden. Jede Datei, die in Ordnern und Unterordnern vorhanden ist, wurde in das Stammverzeichnis verschoben.
Turm

Antworten:

12

Mein ursprünglicher Beitrag hat es versäumt, die Dateierweiterung in den Befehl move aufzunehmen. %~niGibt nur den Basisnamen zurück. Sie müssen ihn verwenden %~nxi, um sowohl den Dateinamen als auch die Erweiterung abzurufen. Ich hoffe, Sie haben Ihre Dateinamen auf meinem Konto nicht entstellt! (

Von einer Eingabeaufforderung:

cd /d C:\Path\To\A
for /r %i in (*) do @move "%i" "%~nxi"

Wenn Sie die leeren Ordner anschließend bereinigen müssen:

for /d %i in (*) do @rd /s /q "%i"

Wenn Sie nun mit Dateinamen in Konflikt geraten, sind Sie auf sich allein gestellt. Sie können den /yParameter zum moveBefehl (vor dem "%i") hinzufügen , um das Überschreiben zu erzwingen. Wenn Sie etwas anderes wollen, benötigen Sie ein anderes Programm, das alles für Sie automatisch umbenennen kann.

Wenn Sie dies in einer Batch-Datei verwenden möchten, ändern Sie alle %in %%.

afrazier
quelle
Wusste nichts von FOR /r- schön!
Daniel Beck
Wow, sehr großartig. Ich verneige mich vor deinem Kommando.
Mokubai
2

Erstellen Sie einen Ordner und kopieren Sie alle anderen Ordner in diesen Ordner . Klicken Sie dann mit der rechten Maustaste auf diesen Ordner und wählen Sie Suchen . Geben Sie in das Suchfeld ein *.*.

Dadurch werden alle Dateien und Ordner aufgelistet. Wählen Sie alle gewünschten Dateien in Ihrem Stammverzeichnis aus und schneiden Sie sie aus. Navigieren Sie zu Ihrem Stammverzeichnis und fügen Sie dort alle Dateien ein.

Richard
quelle
Suche existiert nicht als Befehl in meinem cmd.
Turm
Richard sprach nicht von einem Befehl. Habe seine Antwort bearbeitet, um es klarer zu machen.
Isaac Rabinovitch
0

Installieren Sie Cygwin (oder eine andere Unix-Umgebung für Windows) und führen Sie Folgendes aus:

cd A
find . -type f -exec mv {} . \;
Daniel Beck
quelle
Abhängig von Ihrer mvund Ihren findVarianten müssen Sie möglicherweise find . -type f -exec mv -t . {} \;stattdessen verwenden.
Daniel Beck
1
Für native Windows-Ports vieler Unix-Tools mag ich unxutils.sourceforge.net
Dennis
@ Tennis UnxUtils sind nett, leider mittlerweile ziemlich alt. Wenn Sie sie gerade verwenden, können Sie überprüfen, ob mein Beitrag mit ihnen funktioniert? mkdir -p a/a1 a/a2 a/a3 b/b1 b/b2 b/b3 cund touch a/a1/foo a/a1/bar a/a2/baz a/a3/qux b/b1/quux b/b2/quuux b/b3/quuuux c/ccczur Vorbereitung.
Daniel Beck
-1 Das mag wahr sein, aber ich habe nachgefragt, wie es in cmd geht.
Turm
@ Daniel Ohne Zweifel sind sie alt, ich habe sie jahrelang herumgeschleppt. Ich habe es gerade versucht find . -type f -exec mv {} . ;Und es schien in Ordnung zu funktionieren.
Dennis