Копирование набора определенных файлов из каталога в другой каталог с сохранением структуры папок

У меня есть каталог, который выглядит так:

\isa\documents\2004\2008\jac\file1.txt
\isa\documents\2004\jan\file1.txt
\isa\scannedDocs\2004\2009\jan\file2.pdf
\isa\documents\2005\2008\jac\file1.txt
\isa\documents\2003\jan\file1.txt
\isa\scannedDocs\2002\2009\jan\file2.pdf

У меня есть список файлов, которые мне нужно скопировать (экспортировать из базы данных), но поскольку мне не нужен КАЖДЫЙ файл в каталоге, мне нужны только те, которые скопированы из моего списка:

Файлы-необходимы.txt:

\isa\documents\2004\2008\jac\file1.txt
\isa\documents\2004\jan\file1.txt
\isa\documents\2004\jac\file3.txt
\isa\documents\2003\jan\file1.txt

В принципе:

  1. Мне нужно будет скопировать нужные файлы, и
  2. Журнал, когда файл не может быть найден, и,
  3. Мне нужно сохранить структуру папок, так как файлы могут иметь одно и то же имя, просто в разных каталогах.

Это на машине с Windows 7, и я могу запускать PowerShell и пакетные файлы. Я попробовал robocopy и xcopy и либо получил все каталоги и не файлы, либо все файлы и не каталоги...

Любая помощь будет здорово.

РЕДАКТИРОВАНИЕ:

Итак, я попробовал Robocopy, но он либо копирует каталоги, а не файлы, либо файлы и каталоги. Я еще ничего не пробовал в powershell, но может быть так...

Это Windows, возможно, я просто неправильно написал косые черты выше, я работаю между обеими средами и просто пытался объяснить проблему.

Что я пробовал:

@echo off
set src_folder="C:\batchScripting\TEST_DIR\"
set dst_folder="C:\batchScripting\COPY2_DIR\"
robocopy "C:\batchScripting\TEST_DIR" "C:\batchScripting\COPY2_DIR" FileList.txt /S /V /NP /LOG:"log.log" /R:10 /W:30 

а также

 @echo off
 set src_folder=C:\batchScripting\TEST_DIR\
 set dst_folder=C:\batchScripting\COPY2_DIR\
 for /f "tokens=*" %%i in (File-list.txt) DO xcopy /s /i "%src_folder%\%%i" "%dst_folder%"

person Tim Eagle    schedule 22.04.2014    source источник
comment
Так в чем проблема? Читаете files-needed.txt? Проверка наличия или отсутствия файла? Реальное копирование? Что-то совсем другое?   -  person vonPryz    schedule 22.04.2014
comment
Кроме того, что говорит vonPryz, что вы пробовали? mattgemmell.com/what-have-you-tried   -  person Keith Hill    schedule 22.04.2014
comment
Если directory использует косую черту, то это не Windows/Batch. Вы хотели использовать обратную косую черту? Действительно ли список из базы данных использует косую черту? Я могу придумать пару способов сделать это. Предоставление кода для ваших неудачных попыток было бы очень полезно.   -  person James L.    schedule 23.04.2014


Ответы (1)


@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
FOR /f "delims=" %%a IN (q23221996.txt) DO (
 IF EXIST "%sourcedir%%%a" (ECHO f|xcopy /y "%sourcedir%%%a" "%destdir%%%a" 2>NUL >nul
 ) ELSE (ECHO "%sourcedir%%%a" does NOT exist)
)

GOTO :EOF

Для тестирования я использовал файл с именем q23221996.txt, содержащий ваши данные. sourcedir и destdir настроены в соответствии с моей системой.

Параметр /y в команде xcopy принудительно перезаписывает, если целевой файл уже существует.

person Magoo    schedule 23.04.2014