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”?
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”?
Odpowiedzi:
Mój oryginalny post nie uwzględnił rozszerzenia pliku w poleceniu przenoszenia.
%~ni
zwraca tylko nazwę basename, musisz użyć,%~nxi
aby 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ć /y
parametr do move
polecenia (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 %%
.
FOR /r
- miło!
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.
Zainstaluj Cygwin (lub inne środowisko Unix dla Windows) i uruchom następujące polecenie:
cd A
find . -type f -exec mv {} . \;
mv
i find
wariantów może być konieczne użycie find . -type f -exec mv -t . {} \;
zamiast niej.
mkdir -p a/a1 a/a2 a/a3 b/b1 b/b2 b/b3 c
i touch a/a1/foo a/a1/bar a/a2/baz a/a3/qux b/b1/quux b/b2/quuux b/b3/quuuux c/ccc
do przygotowania.
find . -type f -exec mv {} . ;
I wydawało się, że działa dobrze.