Команда (ы) MSDOS для копирования файлов, соответствующих шаблону в структуре каталогов, в локальный каталог - PullRequest
1 голос
/ 26 сентября 2011

У меня есть задание, которое периодически запускает и архивирует файлы в структуру папок, которая выглядит следующим образом:

ArchiveFolder
    TimestampFolder
        JobnameFolder
            job<timestamp>.xml

Для данной работы я хотел бы собрать все XML-файлы в папке архива вплоский каталог (без подкаталогов, только все файлы) без необходимости углубляться в каждый из них, проверять правильность работы, а затем копировать файл.

Кажется, должен быть довольно простой способ сделать это,Любые предложения?

РЕДАКТИРОВАТЬ: Я думаю, я не был здесь ясно.TimeStampFolder будет иметь имя, например 2011-07-24, JobnameFolder будет иметь имя, например FooFeed или BarFeed, а файл задания будет иметь имя, например job2011-07-24.xml.Существуют от сотен до тысяч папок TimeStampFolders, в каждой из которых может быть одна или несколько папок заданий.Учитывая конкретное имя задания, я хочу собрать все файлы во всех каталогах, которые соответствуют этому типу задания, и выгрузить их в локальную папку без подкаталогов.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2011

EDIT1:

SET JOB=JobName
SET OF=OutputFolder

START /wait NET USE Z: "\\ServerName\Sharename\ArchiveFolder" password password_here /USER:domainname\username /P:NO
PUSHD Z:\
FOR /F "USEBACKQ tokens=*" %%A IN (`DIR /b /a:d /s ^| FIND /I "%JOB%"`) DO (
 FOR /R %%F IN (%%A) DO (
  COPY /Y "%%~fF" "%OF%"
 )
)
POPD

Он, в основном, находит каждый подкаталог ArchiveFolder, который включает в себя JobName, затем копает в каждый найденный файл, чтобы скопировать из него файлы.

EDIT2:

Добавлено NET USE для доступа к общему сетевому ресурсу для выполнения задач над файлами.Если на вашем локальном компьютере UNC уже назначена буква диска, вы можете удалить командную строку NET USE и изменить Z: на назначенную букву диска.

0 голосов
/ 26 сентября 2011
@ECHO OFF
FOR /R %%v IN (job*.xml) DO COPY "%%v" c:\out\
...