2

У меня довольно обширная структура каталогов:

c:\foo
  \foo\1
  \foo\1\doc1
  \foo\1\doc2
  \foo\2
  \foo\2\doc1
  \foo\2\doc2
  ...
  \foo\10\docX

Я хочу переместить (а не просто скопировать) все файлы с расширением .txt в другой каталог c:\textfiles .

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

Я пробовал команду move но она работает только с файлами в текущем каталоге. Я также попробовал xcopy , но он не удаляет файлы в источнике после завершения копирования.

2 ответа2

2

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

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

для /r "c:\source_directory\" %% x in (* .pdf) переместите "%% x" "c:\target_directory\"

Смотрите также:

windows - Переместить все файлы из нескольких подпапок в родительскую папку - Super User

Копировать несколько файлов из подпапок в одну папку - Microsoft Community

1

Rsync

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

быстрый, универсальный, удаленный (и локальный) инструмент для копирования файлов

Из этого ответа на unix.stackexchange ...

rsync -a --prune-empty-dirs --include '*/' --include '*.txt' --exclude '*' source/ target/

Обратите внимание, что существует опция для удаления файлов из источника, которые вы можете включить в командную строку, я думаю, что вы ищете это --remove-source-files , но проверьте это внимательно. Другой вариант, который вы можете найти полезным, это -n

    -n, --dry-run               perform a trial run with no changes made
    --remove-source-files       sender removes synchronized files (non-dir)

находить

find - это еще один инструмент, который вы можете найти в вашей оболочке bash под windows, а также скомпилированный исполняемый файл (gnu findutils)... Следующая строка работает под Linux, но вы можете изменить оператор cp чтобы он соответствовал спецификациям вашей системы. Из другого ответа...

 find . -name '*.txt' -exec cp --parents \{\} /target \; 

Windows эквивалент find

Из другого вопроса / ответа на ваш пакетный скрипт вы можете использовать эти подсказки ...

 dir <drive: [drive:]> /s | findstr /i <pattern>

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

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

dir c:\foo /s *.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .