ROBOCOPY - копирование содержимого папок в одну папку со списком файлов

Поскольку я не могу добавить комментарий, задаю связанный вопрос.

Исходное сообщение , найденное здесь, работает достаточно хорошо. .

Есть ли способ использовать это со списком имен файлов? Я видел, где список файлов можно передать команде ROBOCOPY, но мне не удалось заставить его работать.

Сделав шаг назад, у меня есть ряд папок, и внутри них есть определенные файлы, которые я хочу скопировать в одну папку. У меня есть текстовый файл, в котором перечислены имена этих файлов.

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

Спасибо!


person ThomK    schedule 16.07.2014    source источник
comment
Все папки в одном дереве каталогов?   -  person foxidrive    schedule 16.07.2014
comment
Да, есть одна родительская папка, и все подпапки находятся в этой одной папке. Я не верю, что есть еще уровни папок, что означает, что у вложенных папок нет вложенных папок.   -  person ThomK    schedule 16.07.2014


Ответы (2)


Проверьте это - file.txt имеет имя файла в каждой строке.

Он не обрабатывает конфликты файлов.

@echo off
cd /d "c:\base\folder"
for /f "usebackq delims=" %%a in ("file.txt") do (
    for /f "delims=" %%b in ('dir "%%a" /b /s /a-d ') do copy "%%b" "d:\target\folder"
)
person foxidrive    schedule 16.07.2014
comment
Это, как и вы сами, потрясающе! Спасибо, что ответили так быстро! Это прекрасно работает. Спасибо еще раз! - person ThomK; 16.07.2014

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

C: \ files \ somefiles \ file.txt

C: \ files \ otherfiles \ file.txt

место назначения - C: \ newdir \ файлы создаются как

C: \ newdir \ somefiles-file.txt

C: \ newdir \ otherfiles-file.txt

вот код, пакетный файл 1 проходит через файлы, пакетный файл 2 переименовывает и перемещает их (вместо этого можно скопировать, если вы хотите сохранить источник:

@echo off
for /r %%f in (*.*pr) do @renameandmovefilespart2.bat "%%f" "%%~ff" "%%~xf"

renameandmovefilespart2.bat

@echo off
Setlocal EnableDelayedExpansion
rem set the whole file path
set origWhole=%1
set origPathOnly=%2
set extension=%3
rem here you can set where the directory to hold the flattened hierarchy is
set destDir=c:\destinationDir\
rem  set the directory to do a string replace
rem make this the starting directory, that you dont want in the newly renamed files
set startingDir=C:\starting\directory\
set nothing=
set slash=\
rem here you can set what the character to represent the directory indicator \ in the new files 
set reaplcementDirectoryCharacter=--
set quote="
rem cut out the starting part of the directory
call set newname=%%origWhole:!startingDir!=!nothing!%%
rem replace slashes with new character
call set newname=%%newname:!slash!=!reaplcementDirectoryCharacter!%%
rem remove quotes
call set newname=%%newname:!quote!=!nothing!%%
rem @echo shortened: %newname%
rem @echo source path: %origPathOnly% newPath: %startingDir%
rem @echo extension: %extension%
rem rename the files
ren %origWhole% %newname%
rem prepare to move the file, clean up the source path
call set origPathOnly=%%origPathOnly:!quote!=!nothing!%%
move "%origPathOnly%%newname%" "%destDir%"
person Max    schedule 12.09.2014