Как переместить все .txt файлы в структуре каталогов в другой каталог через командную строку?

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, но он не удаляет файлы в источнике после завершения копирования.

AngryHacker
источник
связанные: stackoverflow.com/questions/4357233/…
mcalex

Ответы:

2

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

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

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

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

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

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

w32sh
источник
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
Hastur
источник