Як можна вирівняти папку в 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
Мені подобається простота цього, але я спробував це з 40-кілограмовими файлами, і це розбило процес провідника.
UpTheCreek

Загальна відповідь командира мені здається легшою.
Ev0oD

13

Я застосував цей підхід до повноважень в кінці кінців, коли мені потрібно було вирівняти велику ієрархічну структуру (в моєму випадку 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
Команда повноважень коротка і добре працює
Максим Єфремов

3

Якщо вам потрібно лише час від часу згладжувати dir вручну, Total Commander ідеально підходить.

У загальному командирі: Перейдіть до свого режисера, який ви хочете розгладити. У меню натисніть Команди> Вид гілки . І ви бачите, що це все сплюснуто, ви можете перемістити / скопіювати його в іншу папку.

Якщо вам потрібно трохи поцікавитись іменами: Виберіть усі файли в розгладженому вигляді, у меню перейдіть до Файли> Засіб перейменування . Тут ви можете додати деяку інформацію від шляху до фактичних імен файлів за допомогою "Перейменувати маску", вам просто потрібно використовувати там тег / кнопку плагіна, шукати та замінювати функцію та маленьку кнопку дурника, яка дозволяє вам внести кілька останніх змін у назви файлів у текстовий редактор. Можливо, це звучить складно, але насправді найпростіший спосіб IMO :)


Що таке Windows Commander? Ви маєте на увазі Total Commander?
UpTheCreek

Рівно :) Використовували його 10 років, тоді ім'я було Windows Commander. Редаговано
teejay

Спасибі. Просто спробував. Не працювало б для 40k невеликих файлів :( споживало багато процесора протягом 10 хв., Тоді з'явилися повторні помилки "не міг створити файл".
UpTheCreek

Використання процесора та мається на увазі повільність є прикрою, але зрозумілою :) Помилка - це щось інше .. Можливо, неправильне іменування, загальна помилка командира або просто неможливість ТС обробляти ці багато файлів. Я б спробував спершу перейменувати меншу кількість файлів або скористатись новою версією TC
teejay

@teejay, мені довелося ловити рибу для деталей вашої пропозиції, але я нарешті зумів це зробити. Я використовував плагін extender2, щоб витягти частини шляху і зробити їх префіксом імені файлу. Ви можете додати деталі для наступного хлопця. Тх.
killogre

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+). Я щойно зробив це, щоб вирівняти папку з 10000 музичних файлів. Працює як шарм.

Ви можете знайти параметри утиліти командного рядка 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/…
Preet Sangha

-Можливо, ви можете допомогти з цим superuser.com/q/552768/59747
MAW74656

1

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

c:> xxcopy / папки-джерела / вирівнювання / SG

Просто прочитайте це посилання: http://www.xxcopy.com/xxcopy16.htm

Ура.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.