Переместить файлы из нескольких папок в родительский каталог с помощью командной строки

8

У меня есть несколько файлов .rar в нескольких папках, например:

C:\Docs\Folder1\rarfile1-1.rar
C:\Docs\Folder1\rarfile1-2.rar
C:\Docs\Folder1\rarfile1-3.rar  

C:\Docs\Folder2\rarfile2-1.rar
C:\Docs\Folder2\rarfile2-2.rar
C:\Docs\Folder2\rarfile2-3.rar  

C:\Docs\Folder3\rarfile3-1.rar
C:\Docs\Folder3\rarfile3-2.rar
C:\Docs\Folder3\rarfile3-3.rar  

Я хочу переместить все файлы .rar в родительский каталог «C: \ Docs». У меня есть более 3 папок, поэтому я думал о создании командного файла или что-то. Каковы будут команды для этого?
Спасибо

Ник
источник
Я искал похожую проблему и нашел этот ответ полезным.
lalthomas

Ответы:

15

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

Было очень весело писать. Требуется .NET 3.5, работает из командной строки, вызывается с параметром -h или без параметра для использования.

MoveFilesUpFromSubfolders
(исходный код)

Обратная связь плюс! :)

Да, и скриншот того, как это выглядит:

                               

Камило Мартин
источник
3
+1 Написание программы для решения чьей-то проблемы. Это обязательство!
Ли Аунг Ип
1
@ Li-aungYip Большое спасибо за комплимент! Кроме того, из-за обстоятельств, у меня больше нет жесткого диска, на котором я использовал код во время, когда я это сделал (потерял это и многие другие вещи), поэтому я очень рад видеть его здесь и скачал его сейчас ( спасибо Mediafire за долгое скачивание с несколькими загрузками, и мне повезло, что я не сохранил его в Megaupload!). Так что, если вы рассматриваете это в перспективе, чем больше вы отдаете, тем больше вы получаете :)
Camilo Martin
Отличная работа! +1 и 50 респ. Я знаю, что ему 4,5 года, но это было очень полезно для меня, потому что я скачал более 90 файлов, которые были в более чем 90 папках. Это помогло мне поместить все файлы в родительскую папку.
Единственная критика, которую я имею, состоит в том, что, когда я пытался использовать это, продолжала появляться ошибка о проблеме с папкой, и это не указывало, почему. Только с помощью команды -t я смог определить причину проблемы с папкой (потому что она была названа с 250+ символами). Это легко обойти, выделив все папки и переименовав одну из них (тогда остальные будут добавлены с номером).
@ edmastermind29 Я очень рад узнать, что мой старый код пригодился кому-то еще. Хотите верьте, хотите нет, архив исходного кода был удален из mediafire за то, что он автоматически помечен как нарушение авторских прав (что довольно абсурдно, учитывая, что там нет видео или аудио, а есть только текст), и я не знаю, как я это сделал , Если это будет полезно, на этом этапе я бы написал однострочник bash для решения такой проблемы, как mv dir/sub/* dir; rmdir dir/subв цикле.
Камило Мартин
7

Попробуйте это:

for /d %f in (docs\*) do (
pushd %f
move .\*.* ..
popd
)
BillP3rd
источник
Можете ли вы объяснить это немного больше?
Ник
@ Ник: Для всех папок в docs, введите папку. Переместить все файлы из текущей папки в родительскую папку. Вернуться в родительскую папку.
Hello71
pushdИ popdне является действительно необходимым. cdбудет работать просто отлично.
Hello71
Как объяснил Hello71. Также это можно сделать одной строкой:for /d %f in (docs\\*) do move %f\\*.* docs
BillP3rd
1
NB. Ни оригинал выше, ни однострочный не будут правильно обрабатывать дубликаты имен файлов.
BillP3rd
5

Ну, ответ на ваш вопрос очень прост. Это не сценарий, но он будет делать.

Я предположил, что у вас запущены окна.

  • Поместите себя в каталог C: \ Docs
  • Нажмите F3 (поиск)
  • Искать * .rar
  • Нажмите Crtl + A
  • Нажмите Ctrl + X
  • Закройте окно поиска и снова перейдите в C: \ Dosc в проводнике.
  • Вставьте вырезанные файлы, нажав CTRL + V.
integratorIT
источник
+1 за хороший и простой обходной путь без каких-либо сторонних разработчиков или сценариев.
Сякур Рахман
+ 1 лучший и самый быстрый метод A +++
Sickest
3

Всасывание сработало для меня в этом вопросе.

Suction - это бесплатное портативное приложение, которое поможет быстро разобраться в грязных папках.

Всасывание работает путем объединения родительских каталогов. Например, если ваш каталог изображений полон ненужных папок, перетащите папку в интерфейс Suction, и она покончит с папками, оставив вас только с файлами. Это также полезно для людей, которые загружают много вещей.

Raystafarian
источник
0

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

for / f "tokens = *"% a in ('dir "C: \ Temp \ Epub * .epub" / s / b') do copy / y "% a" C: \ Temp \ epub.

for / f "tokens = *"% a in ('dir "C: \ Temp \ Epub * .epub" / s / b') переместить / y "% a" C: \ Temp \ epub

"tokens = * - захватывать пути специальными символами

user340812
источник
-1

Это должно работать:

move C:\Docs\*\* C:\Docs
Hello71
источник
2
Я получаю сообщение об ошибке: неверный синтаксис имени файла, имени каталога или метки тома.
Ник
** не работает
Ник
Вы должны убедиться, что вы вставили `\`, и что он не экранирован вашим текстовым редактором.
Hello71
Выполнение этой команды из командной строки CMD (в Windows 7) приводит к ошибке, замеченной Ником.
BillP3rd
Это не сработает. * неправильно работает с папками. Должен взломать сторонние программы, такие как Total Commander.
Surfasb