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

19

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

Folder1
   File1
   Folder2
      File2
   Folder3
      File3
      Folder4
         File4

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

Folder1
   File1
   File2
   File3
   File4

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

Der Hochstapler
источник
Вы ищете существующую программу, которая сделает это за вас, или фрагмент кода (на каком языке программирования), который это делает?
Мэтт Болл
@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\
UpTheCreek
источник
Для выравнивания может лучше подойти 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 . И вы видите, что все это сплющено, вы можете переместить / скопировать его в другую папку.

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

TeeJay
источник
Что такое 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

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

Бродди Р.Х.
источник