Как сгладить папку в Windows 7, если все имена файлов разные?


19

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

Folder1
   File1
   Folder2
      File2
   Folder3
      File3
      Folder4
         File4

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

Folder1
   File1
   File2
   File3
   File4

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


Вы ищете существующую программу, которая сделает это за вас, или фрагмент кода (на каком языке программирования), который это делает?
Мэтт Болл

@MattBall: я ищу самый простой способ сделать это. В идеале это будет открытие терминала и ввод некоторой команды. Опять же, я не очень разбираюсь в Windows, поэтому, пожалуйста, дайте мне знать, если есть лучший способ. Благодарю.

Ответы:


32

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

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


1
Мне нравится простота этого, но я попробовал это с файлами 40k, и это остановило процесс проводника.
UpTheCreek

Полный ответ командира мне кажется проще.
Ev0oD

13

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

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

Для выравнивания может лучше подойти Move-Item?
geisterfurz007 Останови этот хаос

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))}

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

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

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

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


1
Команда powershell коротка и хорошо работает
Максим Ефремов

3

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

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

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


Что такое Windows Commander? Вы имеете в виду Total Commander?
UpTheCreek

Точно :) Уже 10 лет пользуюсь им, тогда называли Windows Commander. Отредактировано
teejay

Благодарю. Только что попробовал. Не будет работать для 40k небольших файлов :( потреблял много ЦП в течение 10 минут, а затем повторил ошибки «не
удалось

Использование ЦП и подразумеваемая медлительность неудачны, но понятны :) Ошибка в другом: может быть неправильное именование, общая ошибка коммандера или просто неспособность TC обрабатывать такое количество файлов. Я попытался бы сначала переименовать меньшее количество файлов или использовать более новую версию TC
teejay

@teejay, мне пришлось ловить рыбу для деталей вашего предложения, но мне наконец удалось это сделать. Я использовал плагин expander2, чтобы извлечь части пути и сделать их префиксом имени файла. Вы можете добавить некоторые детали для следующего парня. Tx.
Киллогр

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" 

поэтому мне нужно открыть терминал и ввести эти команды, убедившись, что я заменил «папку» на соответствующий путь? Благодарю.

Если вы не хотите писать это в сценарии, то да. ОТОХ .....
Прит Сангха

Можно ли это обобщить и присоединить к действию контекстного меню? Я хотел бы иметь возможность щелкнуть правой кнопкой мыши файл, щелкнуть «Свести файл», а затем переместить все файлы в нем до уровня папки. Удаление папки после было бы тоже неплохо.
MAW74656

да, он может поместить его в пакетный файл с% 1 в качестве имени папки. stackoverflow.com/questions/6162415/…
Преет Сангха

-Возможно, вы можете помочь с этим superuser.com/q/552768/59747
MAW74656

1

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.