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

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

В этих подкаталогах хранятся файлы .pdf и .db.

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

Ответ 1

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

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

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

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

Ответ 2

Внешний цикл 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

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

Ответ 3

Я не думаю, что есть подстановочный знак, который будет работать на подпапках, поэтому вы хотите использовать цикл для прохождения каждой подпапки и перемещать *.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, они необходимы для команды перемещения для разрешения пути.

** EDIT: В ответ на принятый ответ, Из командной строки в Windows XP и Windows 7, соответственно:

command prompts

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

Ответ 4

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

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

Ответ 5

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

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

FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
        FOR %%X in (*.mkv) DO (
            move "%%X" "%CD%"
        )
    popd
)

Ответ 6

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

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

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

Ответ 7

@echo on

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

pause

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

Ответ 8

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

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

Ответ 9

MOVE "C:\FOLDER 1\PDF FILES\*.pdf" "C:\FOLDER 1"
MOVE "C:\FOLDER 1\DB FILES\*.db" "C:\FOLDER 1"

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

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

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