Jak spłaszczyć folder w systemie Windows 7, zakładając, że wszystkie nazwy plików są różne?

19

Powiedzmy na przykład, że mam następującą hierarchię folderów:

Folder1
   File1
   Folder2
      File2
   Folder3
      File3
      Folder4
         File4

Chcę wykonać polecenie, które powoduje:

Folder1
   File1
   File2
   File3
   File4

lub coś podobnego. Nie znam się na Windowsie, więc w odpowiedzi doceniłbym jak najwięcej szczegółów.

Der Hochstapler
źródło
Szukasz istniejącego programu, który by to dla ciebie zrobił, czy kawałka kodu (jaki język programowania) to robi?
Matt Ball
@MattBall: Szukam najłatwiejszego możliwego sposobu na zrobienie tego. Najlepiej byłoby otworzyć terminal i wprowadzić jakieś polecenie. Ponownie nie mam dużego doświadczenia z systemem Windows, więc daj mi znać, jeśli istnieje lepszy sposób. Dzięki.

Odpowiedzi:

32

Absolutnie najłatwiejszym sposobem jest wejście do wspólnego folderu głównego i wyszukiwanie wszystkich plików (tj. Wyszukiwanie *). Po znalezieniu wszystkich plików zaznacz wszystkie pliki, naciśnij Ctrl + X i ponownie przejdź do wspólnego folderu głównego. Teraz naciśnij Ctrl + V, aby wkleić wszystkie pliki do folderu głównego. Po zakończeniu usuń wszystkie podkatalogi.

Nie wiem, czy można to zrobić jako zadanie wsadowe.

Henning Klevjer
źródło
1
Podoba mi się jego prostota, ale wypróbowałem to z plikami 40k i to zawiesiło proces eksploratora.
UpTheCreek,
Całkowita odpowiedź dowódcy wydaje mi się łatwiejsza.
Ev0oD,
13

W końcu zastosowałem to podejście PowerShell, gdy potrzebowałem spłaszczyć dużą hierarchiczną strukturę (w moim przypadku pngs):

Get-ChildItem C:\sourcefolder -Recurse -Filter "*.png" | Copy-Item -destination C:\destinationfolder\
UpTheCreek
źródło
Do spłaszczania może lepiej nadaje się Move-Item?
geisterfurz007 Zatrzymaj ten chaos
4

exe systemu Windows: http://en.sourceforge.jp/projects/sfnet_flatfolder/

lub AHK:

fileselectfolder,MyFold,::{20d04fe0-3aea-1069-a2d8-08002b30309d}
SetWorkingDir, %MyFold%
loop, *.*,0,1
{
  parentpath := RegExReplace(A_LoopFileDir,"\\","-")
  ;StringReplace, parentpath, A_LoopFileDir, \,-,All
  newname = %parentpath%-%A_LoopFileName%
  ;msgbox %newname%
  If a_loopfiledir <>
    filemove, %a_loopfilefullpath%,%newname%
}

loop, %myfold%\*.*,2,1
  fileremovedir, %a_loopfilefullpath%,1

exitapp

lub użyj Directory Opus

lub PowerShell

(ls -r -include *.jpg) | % { mv -literal $_ $_.Name.Insert(0, [String]::Format("{0} - ", $_.Directory.Name))}

lub partia (jak wspomniano powyżej)

lub ręczne wyszukiwanie, wycinanie i wklejanie, jak wspomniano powyżej

Istnieje wiele sposobów, w zależności od umiejętności i skłonności, możesz wybrać dowolną z nich i udoskonalić ją zgodnie z własnymi potrzebami.

Możesz potrzebować tego Usuń puste katalogi po powyższej operacji

Vijay
źródło
1
Komenda programu PowerShell jest krótka i dobrze działa
Maxim Yefremov
3

Jeśli potrzebujesz od czasu do czasu ręcznie spłaszczyć reż, Total Commander jest idealny.

W Total Commander: Przejdź do katalogu, który chcesz spłaszczyć. W menu kliknij Polecenia> Widok gałęzi . I widzisz, że wszystko jest spłaszczone, możesz przenieść / skopiować go do innego folderu.

Jeśli chcesz nieco zmodyfikować nazwy plików: Wybierz wszystkie pliki w widoku spłaszczonym, w menu wybierz polecenie Pliki> Narzędzie wielokrotnej zmiany nazwy . Tutaj możesz dodać informacje ze ścieżki do rzeczywistych nazw plików za pomocą „Zmień nazwę maski”, wystarczy użyć tam tagu / przycisku wtyczki, funkcji wyszukiwania i zamiany oraz małego przycisku foldera, który pozwala na dokonanie ostatnich edycji nazw plików w Edytor tekstu. Może brzmieć skomplikowanie, ale naprawdę najprostszy sposób IMO :)

teejay
źródło
Co to jest Windows Commander? Masz na myśli Total Commander?
UpTheCreek,
Dokładnie :) Używam go od 10 lat, wtedy nazywał się Windows Commander. Wycięte
teejay
Dzięki. Właśnie tego spróbowałem. Nie działa jednak w przypadku małych plików o wielkości 40 000 :( zużywało dużo procesora przez 10 minut, a następnie pojawiały się powtarzające się błędy „nie można utworzyć pliku”.
UpTheCreek
Użycie procesora i sugerowana powolność jest niefortunne, ale zrozumiałe :) Błąd jest czymś innym .. może to być złe nazewnictwo, całkowity błąd dowódcy lub po prostu niezdolność TC do obsługi tak wielu plików. Najpierw spróbuję zmienić nazwę mniejszej liczby plików lub użyć nowszej wersji TC
teejay
@ Teejay, musiałem wyłowić szczegóły twojej sugestii, ale w końcu udało mi się to. Użyłem wtyczki expander2 do wyodrębnienia części ścieżki i uczynienia ich przedrostkami nazwy pliku. Możesz dodać kilka szczegółów dla następnego faceta. TX
killogre
3

Całkiem proste z opcją wiersza poleceń dla osób niezbyt skłonnych technicznie.

  1. Utwórz plik o nazwie „flatten.cmd”
  2. Otwórz ten plik w Notatniku
  3. W pliku umieść następujące elementy:

    FOR /R {SourcePath} %%G IN (*.mp3) DO move "%%G" {Destination}
    
  4. Zamień „{SourcePath}” na folder, który chcesz spłaszczyć. W twoim przypadku „c: \ Folder1”

  5. Zamień „{Miejsce docelowe”} na folder, do którego chcesz przenieść pliki. W twoim przypadku również „c: \ Folder1”. Kod powinien teraz wyglądać następująco:

    FOR /R c:\Folder1 %%G IN (*.mp3) DO move "%%G" c:\Folder1
    
  6. Otwórz okno wiersza poleceń. Można to zrobić na kilka sposobów, ale jest to szybkie:

    • Kliknij przycisk Start
    • Kliknij Wszystkie programy
    • Kliknij Akcesoria
    • Kliknij Wiersz polecenia
  7. W oknie wiersza polecenia wpisz:

    cd {folder where you put the flatten.cmd file}
    flatten
    

I to zrobi (Windows 8+) Właśnie to zrobiłem, aby spłaszczyć folder 10 000 plików muzycznych. Działa jak marzenie.

Opcje narzędzia wiersza polecenia FOR można znaleźć na stronie https://technet.microsoft.com/en-us/library/bb490909.aspx .

Ed Williams
źródło
1

za pomocą skryptu wsadowego (z góry mojej głowy):

Wyszukaj polecenie FOR

Pierwszy wiersz przenosi wszystkie pliki z podkatalogów do katalogu głównego. Drugi usuwa podfoldery

for /f %f in ('dir "c:\folder\*" /s/b/a-d') do if not %~ff"=="c:\folder" move "%f" "c:\folder"
for /f %f in ('dir "c:\folder\*" /s/b/ad') do if not "%~ff"=="c:\folder" rd /s/q "%f" 
Preet Sangha
źródło
więc muszę otworzyć terminal i wprowadzić te polecenia, upewniając się, że zastąpię „folder” odpowiednią ścieżką? Dzięki.
Jeśli nie chcesz pisać w skrypcie, tak. OTOH .....
Preet Sangha
Czy można to uogólnić i dołączyć do akcji menu kontekstowego? Chciałbym móc kliknąć plik prawym przyciskiem myszy, kliknąć „Spłaszcz plik”, a następnie przenieść wszystkie zawarte w nim pliki na poziom folderu. Przyjemne byłoby również usunięcie folderu później.
MAW74656
tak, może umieścić go w pliku wsadowym z% 1 jako nazwą folderu. stackoverflow.com/questions/6162415/…
Preet Sangha
-Być może możesz pomóc z tym superużytkownikiem.com
q
1

Cześć, możesz także użyć narzędzia xxcopy (www.xxcopy.com), jego xcopy na steriods (sort-of). Za pomocą tego narzędzia można „spłaszczyć” pliki w folderach w jednym folderze.

c:> xxcopy / source-folder / flatten / SG

Po prostu przeczytaj ten link: http://www.xxcopy.com/xxcopy16.htm

Twoje zdrowie.

Broddi RH
źródło