Jak przenieść każdy plik w drzewie do katalogu głównego drzewa?

10

Mam folder (nazwijmy to A) z dużą ilością podfolderów B, C, D, E, które następnie mają podfoldery B1, B2, B3, ... C1, C2, C3 ...

Jak mogę użyć cmd przenieść wszystkie pliki ze wszystkich podfolderów do folderu głównego „A”?

Wieża
źródło
Zakładam, że chcesz każdy plik w jednym katalogu głównym, a nie w podfolderach? Czyli A \ Plik1, A \ Plik2, a nie A \ Folder2 \ Plik1?
Kanadyjczyk Łukasz
@Luke - Tak, rozumiesz. Każdy plik, który istnieje w folderach i podfolderach, został przeniesiony do katalogu głównego.
Wież

Odpowiedzi:

12

Mój oryginalny post nie uwzględnił rozszerzenia pliku w poleceniu przenoszenia. %~nizwraca tylko nazwę basename, musisz użyć, %~nxiaby uzyskać zarówno nazwę pliku, jak i rozszerzenie! Mam nadzieję, że nie zmieniłeś nazw plików na moim koncie! (

Z wiersza polecenia:

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

Jeśli chcesz później wyczyścić puste foldery:

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

Teraz, jeśli masz konflikty nazw plików, jesteś sam. Możesz dodać /yparametr do movepolecenia (przed "%i"), aby wymusić nadpisanie. Jeśli chcesz czegoś innego, potrzebujesz innego programu, który może automatycznie zmienić nazwę wszystkiego dla Ciebie.

Ponadto, jeśli chcesz używać tego w pliku wsadowym, zmienić wszystko %do %%.

afrazier
źródło
Nie wiedziałem o FOR /r- miło!
Daniel Beck
Wow, bardzo niesamowite. Kłaniam się waszemu dowódcy.
Mokubai
2

Utwórz folder i skopiuj do niego wszystkie inne foldery, a następnie kliknij prawym przyciskiem myszy ten folder i wybierz Wyszukaj . W polu wyszukiwania wpisz *.*.

Spowoduje to wyświetlenie listy wszystkich plików i folderów. Wybierz wszystkie pliki, które chcesz w katalogu głównym i wytnij je. Przejdź do katalogu głównego i wklej tam wszystkie pliki.

Richard
źródło
Wyszukiwanie nie istnieje jako polecenie w moim cmd.
Rook
Richard nie mówił o komendzie. Zredagowałem jego odpowiedź, aby była bardziej zrozumiała.
Isaac Rabinovitch
0

Zainstaluj Cygwin (lub inne środowisko Unix dla Windows) i uruchom następujące polecenie:

cd A
find . -type f -exec mv {} . \;
Daniel Beck
źródło
W zależności od wersji mvi findwariantów może być konieczne użycie find . -type f -exec mv -t . {} \;zamiast niej.
Daniel Beck
1
Dla rodzimych portów Windows wielu narzędzi uniksowych lubię unxutils.sourceforge.net
Dennis
@Dennis UnxUtils są ładne, niestety dość stare. Jeśli ich używasz, czy możesz sprawdzić, czy mój post z nimi współpracuje? mkdir -p a/a1 a/a2 a/a3 b/b1 b/b2 b/b3 ci touch a/a1/foo a/a1/bar a/a2/baz a/a3/qux b/b1/quux b/b2/quuux b/b3/quuuux c/cccdo przygotowania.
Daniel Beck
-1 To może być prawda, ale pytałem, jak to zrobić w cmd.
Wież
@Daniel Bez wątpienia są stare, ciągnęłam je od lat. Właśnie próbowałem find . -type f -exec mv {} . ;I wydawało się, że działa dobrze.
Dennis