Как переместить все файлы с определенным расширением из всех подкаталогов в родительский каталог с помощью CMD? - PullRequest
17 голосов
/ 05 декабря 2010

Папка c:\folder1 содержит subfolder1, subfolder2 и т. Д.

Эти подкаталоги содержат файлы .pdf и .db.

Как все файлы .pdf можно переместить в c:\folder1 с помощью интерпретатора команд Windows?

Ответы [ 9 ]

21 голосов
/ 06 ноября 2012

Это сработало для меня:

for /r "c:\source_directory\" %%x in (*.pdf) do move "%%x" "c:\target_directory\"

Эта команда будет рекурсивно копировать все PDF-файлы из исходного каталога в целевой, используя cmd в windows 7 - протестировано и работает.

Надеюсь, это поможет.

6 голосов
/ 08 октября 2012

Внешний цикл for выводит список подкаталогов в рабочем каталоге, внутренний цикл for выводит список подкаталогов для перемещения по пути назначения:

for /d %f in (*.*) do for /d %e in (%f\*.*) do move "%e" DestinationPath

Это лучше всего работает, если DestinationPath не является подпапкой рабочего каталога, так как он попытается переместить DestinationPath в себя.

Чтобы подтвердить команду перед запуском ее оптом, начните с повторения команд последнего хода, например:

for /d %f in (*.*) do for /d %e in (%f\*.*) do echo move "%e" DestinationPath

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

5 голосов
/ 05 декабря 2010

Я не думаю, что есть подстановочный знак, который будет работать с подпапками, поэтому вы хотите использовать цикл для просмотра каждой подпапки и перемещения * .pdf;

FOR /R [your root folder path] %%G IN (*.pdf) DO move %%G [new path]

Команда после DO по своей сути находится в своих собственных кавычках.Если вы ожидаете пробелы в источнике или месте назначения, используйте двойные кавычки для их инкапсуляции, например:

FOR /R "source folder with spaces" %%G IN (*.pdf) DO move "%%G" "dest path with spaces"

ПРИМЕЧАНИЕ кавычки около %% G, они необходимы для команды перемещения вразрешите путь.

** РЕДАКТИРОВАТЬ: В ответ на принятый ответ, из командной строки Windows XP и Windows 7, соответственно:

command prompts

Это показываетчто подстановочный знак не работает в путях, только для файлов в одном каталоге (например, C: \ folder * .files).Командная строка не работает рекурсивно, когда встречается с подстановочным знаком.

4 голосов
/ 28 февраля 2018

Существует другой способ сделать это в проводнике Windows (графический интерфейс, а не командная строка):

  • Перейдите в каталог верхнего уровня
  • В поле поиска в правом верхнем углу введите * .pdf и нажмите поиск
  • Выберите все файлы и перетащите их в папку верхнего уровня
  • Отвечать на любые запросы о перезаписи файлов
3 голосов
/ 16 апреля 2017

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

Используется для поиска во всех подпапках файла .MKV и перемещения их в текущий каталог, в котором находится пакетный файл.

FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
        FOR %%X in (*.mkv) DO (
            move "%%X" "%CD%"
        )
    popd
)
2 голосов
/ 03 ноября 2017
@echo on

for /r "F:\All_drawings\newdrg\" %%x in (*.tiff) do move "%%x" "F:\Alldrawings"

pause

{перемещает все файлы из папки newdrg и ее «подпапок» в целевую папку Alldrawings, эта команда предназначена для операций с пакетными файлами, для командной строки используется одинарный «%» в обоих местах}.

2 голосов
/ 01 июня 2013

Robocopy сделал чудеса для меня:

 robocopy c:\cache c:\cache-2012 ?????-2012*.hash /S /MOV

Я использовал его, чтобы переместить все файлы с определенной маской из c:\cache и его многочисленных подкаталогов.

1 голос
/ 05 декабря 2010
MOVE "C:\FOLDER 1\PDF FILES\*.pdf" "C:\FOLDER 1"
MOVE "C:\FOLDER 1\DB FILES\*.db" "C:\FOLDER 1"

После команды перемещения у вас есть исходная папка, а затем место назначения, куда файлы будут перемещены.Символ * перед каждым расширением файла является функцией подстановки, которая будет выбирать все указанные типы файлов, существующие в этом каталоге.

Кроме того, если вы можете создать файл .bat с этими командами, если хотите.Для этого вставьте свои команды в блокнот и сохраните их как .bat вместо .txt

Затем вы можете дважды щелкнуть файл, и он будет выполненкоманды в файле каждый раз, когда вы делаете.Это полезно, если у вас есть повторяющиеся задачи, требующие этого.

1 голос
/ 05 декабря 2010

Просто беру дикий удар в темноте, но, если я правильно помню, DOS может обрабатывать глобусы, и эквивалент mv равен MOVE, поэтому:

MOVE C:\FOLDER1\*\*.PDF C:\FOLDER1\

...