18

Например, скажем, что у меня есть следующая иерархия папок:

Folder1
   File1
   Folder2
      File2
   Folder3
      File3
      Folder4
         File4

Я хочу выполнить некоторую команду, которая приводит к:

Folder1
   File1
   File2
   File3
   File4

или что-то подобное. Я не очень знаком с Windows, поэтому буду благодарен как можно подробнее в ответе.

7 ответов7

31

Абсолютно простой способ - войти в общую корневую папку и выполнить поиск по всем файлам (например, поиск *). Когда все файлы найдены, отметьте все файлы, нажмите Ctrl + X и снова перейдите к общей корневой папке. Теперь нажмите Ctrl + V, чтобы вставить все файлы в корневую папку. Когда закончите, удалите все подкаталоги.

Я не знаю, можно ли это сделать как пакетную работу.

13

Я использовал этот подход PowerShell в конце, когда мне нужно было сплющить большую иерархическую структуру (в моем случае pngs):

Get-ChildItem C:\sourcefolder -Recurse -Filter "*.png" | Copy-Item -destination C:\destinationfolder\
4

Windows EXE:http://en.sourceforge.jp/projects/sfnet_flatfolder/

или 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

или воспользуйтесь Справочником Opus

или Powershell

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

или партия (как указано выше)

или ручной поиск, вырезать и вставлять, как указано выше

Есть много способов, в зависимости от ваших навыков и склонностей, вы можете выбрать любой из них, и уточнить в соответствии с вашими потребностями.

Вам может понадобиться это Удалить пустые каталоги после вышеуказанной операции

3

Если вам нужно только время от времени выравнивать каталог вручную, Total Commander отлично подойдет.

В Total Commander: перейдите к вашему каталогу, который вы хотите сгладить. В меню выберите Commands> Branch View. И вы видите, что все это сплющено, вы можете переместить / скопировать его в другую папку.

Если вам нужно немного повозиться с именами файлов: выберите все файлы в плоском виде, в меню выберите « Файлы»> "Инструмент многократного переименования". Здесь вы можете добавить некоторую информацию из пути к фактическим именам файлов, используя "Переименовать маску", вам просто нужно использовать там тег / кнопку плагина, функцию поиска и замены и маленькую кнопку, которая позволяет вам вносить последние изменения в имена файлов в Текстовый редактор. Может показаться сложным, но на самом деле самый простой способ ИМО :)

3

Довольно просто с опцией командной строки для тех, кто не супер технически склонен.

  1. Создайте файл где-нибудь с именем "flatten.cmd"
  2. Откройте этот файл в блокноте
  3. В файле поместите следующее:

    FOR /R {SourcePath} %%G IN (*.mp3) DO move "%%G" {Destination}
    
  4. Замените "{SourcePath}" на папку, которую вы хотите сгладить. В вашем случае "c:\Folder1"

  5. Замените "{Destination"} на папку, в которую вы хотите переместить файлы. В вашем случае также "c:\Folder1". Код теперь должен выглядеть так:

    FOR /R c:\Folder1 %%G IN (*.mp3) DO move "%%G" c:\Folder1
    
  6. Откройте окно командной строки. Можно сделать это несколькими способами, но это быстро:

    • Нажмите кнопку Пуск
    • Нажмите Все программы
    • Нажмите Аксессуары
    • Нажмите Командная строка
  7. В окне командной строки введите:

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

И это будет сделано (Windows 8+). Я просто сделал это, чтобы сгладить папку с 10 000 музыкальных файлов. Работает как шарм.

Вы можете найти параметры для утилиты командной строки FOR по адресу https://technet.microsoft.com/en-us/library/bb490909.aspx.

1

используя пакетный скрипт (от макушки головы):

Посмотрите на команду FOR

Первая строка перемещает все файлы из подкаталогов в корневой каталог. Вторая строка удаляет вложенные папки.

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" 
1

Привет, вы также можете использовать инструмент xxcopy (www.xxcopy.com), его xcopy на стероидах (вроде как). С помощью этого инструмента вы можете "свести" файлы в папках в одну папку.

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

Просто прочитайте эту ссылку:http://www.xxcopy.com/xxcopy16.htm

Приветствия.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .