Папка c:\folder1
содержит subfolder1
, subfolder2
и т.д.
В этих подкаталогах хранятся файлы .pdf
и .db
.
Как все файлы .pdf
можно перенести на c:\folder1
с помощью интерпретатора команд Windows?
Папка c:\folder1
содержит subfolder1
, subfolder2
и т.д.
В этих подкаталогах хранятся файлы .pdf
и .db
.
Как все файлы .pdf
можно перенести на c:\folder1
с помощью интерпретатора команд Windows?
Это сработало для меня:
for /r "c:\source_directory\" %%x in (*.pdf) do move "%%x" "c:\target_directory\"
Эта команда будет рекурсивно копировать все файлы PDF из исходного каталога в целевой, используя cmd в Windows 7 - протестировано и работает.
Надеюсь, поможет.
Внешний цикл 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
и скопируйте/вставьте один из результатов, чтобы запустить его и подтвердить, что он работает так, как вы ожидали. Затем уберите эхо и начните двигаться.
Я не думаю, что есть подстановочный знак, который будет работать на подпапках, поэтому вы хотите использовать цикл для прохождения каждой подпапки и перемещать *.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, соответственно:
Это показывает, что подстановочный знак не работает в путях, только для файлов в одном каталоге (например, C:\folder *.files). Командная строка не работает рекурсивно, когда встречается подстановочный знак.
Существует другой способ сделать это в проводнике Windows (GUI, а не в командной строке):
Я знаю, что это превосходно, но на всякий случай это помогает кому-то.
Используется для поиска всех подпапок для файла .MKV и перемещения их в текущий каталог, в котором находится пакетный файл.
FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
FOR %%X in (*.mkv) DO (
move "%%X" "%CD%"
)
popd
)
Robocopy сделал для меня чудеса:
robocopy c:\cache c:\cache-2012 ?????-2012*.hash /S /MOV
Я использовал его для перемещения всех файлов с определенной маской из c:\cache
и ее многочисленных подкаталогов.
@echo on
for /r "F:\All_drawings\newdrg\" %%x in (*.tiff) do move "%%x" "F:\Alldrawings"
pause
{перемещает все файлы из папки newdrg
и ее "подпапок" в целевую папку Alldrawings
, эта команда предназначена для работы пакетного файла для использования командной строки single "%" в обоих местах}.
Просто возьмите дикий удар в темноте здесь, но если я правильно помню, DOS может обрабатывать глобусы, а эквивалент mv
- MOVE
, поэтому:
MOVE C:\FOLDER1\*\*.PDF C:\FOLDER1\
MOVE "C:\FOLDER 1\PDF FILES\*.pdf" "C:\FOLDER 1"
MOVE "C:\FOLDER 1\DB FILES\*.db" "C:\FOLDER 1"
После команды перемещения у вас есть исходная папка, за которой следует место назначения, куда будут перемещены файлы. * Перед каждым расширением файла является подстановочной функцией, которая выберет весь указанный тип файла, существующий в этом каталоге.
Кроме того, если вы можете создать .bat файл с этими командами, если хотите. Для этого вставьте свои команды в блокнот и сохраните их как .bat вместо .txt
Затем вы можете дважды щелкнуть файл, и он будет выполнять команды в файле каждый раз, когда вы это сделаете. Это полезно, если для этого требуются повторяющиеся задачи.