Як перемістити кожен файл у дереві до кореня дерева?


10

У мене є папка (назвемо це A) з великою кількістю підпапок B, C, D, E, які потім знову мають підпапки B1, B2, B3, ... C1, C2, C3 ...

Як я можу за допомогою cmd переміщати всі файли з усіх папок у "кореневу" папку A?


Я припускаю, що ви хочете, щоб кожен файл був у одному корені, а не в папках? Отже, A \ File1, A \ File2, а не A \ Folder2 \ File1?
Канадський Люк

@Luke - Так, ти це отримав. Кожен файл, який існує у папках та вкладених папках, переміщується до кореня.
Грак

Відповіді:


12

Моя оригінальна публікація знехтувала, щоб включити розширення файлу в команду переміщення. %~niповертає лише базове ім'я, яке вам потрібно використовувати, %~nxiщоб отримати і ім’я файлу, і розширення! Сподіваюсь, ви не зіпсували свої файли на моєму рахунку! (

З командного рядка:

cd /d C:\Path\To\A
for /r %i in (*) do @move "%i" "%~nxi"

Якщо після цього потрібно очистити порожні папки:

for /d %i in (*) do @rd /s /q "%i"

Тепер, якщо у вас є зіткнення з іменем файлу, ви самостійно. Ви можете додати /yпараметр до moveкоманди (до "%i"), щоб примусити перезаписувати. Якщо ви хочете чогось іншого, вам знадобиться інша програма, яка може перейменувати все для вас.

Крім того , якщо ви хочете використовувати це в пакетному файлі, змінити все %до %%.


Не знав про FOR /r- приємно!
Даніель Бек

Вау, дуже приголомшливий. Я кланяюся вашому командуванню-фу.
Мокубай

2

Створіть папку та скопіюйте у неї всі інші папки, потім клацніть правою кнопкою миші та виберіть Пошук . У вікні пошуку введіть *.*.

Тут буде перераховано всі файли та папки. Виберіть усі файли, які ви хочете, у вашому кореневому каталозі та виріжте їх. Перейдіть до кореневого каталогу та вставте всі файли туди.


пошук не існує як команда в моєму cmd.
Грак

Річард не говорив про команду. Відредагували його відповідь, щоб зробити її зрозумілішою.
Ісаак Рабінович

0

Встановіть Cygwin (або інше середовище Unix для Windows) та запустіть наступне:

cd A
find . -type f -exec mv {} . \;

Залежно від ваших mvта findваріантів, можливо, вам доведеться використовувати find . -type f -exec mv -t . {} \;замість цього.
Даніель Бек

1
Для рідних портів Windows багатьох інструментів Unix мені подобається unxutils.sourceforge.net
Денніс

@Dennis UnxUtils приємний, на жаль, вже досить старий. Якщо ви зараз ними користуєтесь, чи можете ви підтвердити, що моя публікація працює з ними? mkdir -p a/a1 a/a2 a/a3 b/b1 b/b2 b/b3 cі touch a/a1/foo a/a1/bar a/a2/baz a/a3/qux b/b1/quux b/b2/quuux b/b3/quuuux c/cccдля підготовки.
Даніель Бек

-1 Це може бути правдою, але я цікавився, як це зробити в cmd.
Грак

@Daniel Без сумніву, вони старі, я тягну їх довгі роки. Я просто спробував find . -type f -exec mv {} . ;І, здавалося, спрацює добре.
Денніс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.