1

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

У меня есть список требований для сборки каждого клиента. Я думаю сначала скопировать основной материал (двоичные файлы и тому подобное, используемый всеми клиентами), а затем скопировать специфический материал для клиента в зависимости от того, для кого я делаю сборку, используя эти списки. У нас что-то подобное уже работает с xcopy.

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

После получения всей необходимой информации в Lua создается следующая команда:

robocopy "Z:\path\to\source" "../dest"  /e /xf *.cpp *.h *.hpp [[. . .]] *.cxx   /xd Data/Testing Data/Some/Client/Data Data/Other/Client/Data [[ . . .]] Data/More/Directories 

При запуске я получаю следующий вывод:

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows                              
-------------------------------------------------------------------------------

  Started : Tuesday, August 1, 2017 11:15:59 AM
   Source : Z:\path\to\source
     Dest : ../dest

    Files : *.*

Exc Files : *.cpp
        *.h
        *.hpp
        [[. . .]]
        *.cxx

 Exc Dirs : Data/Testing
        Data/Some/Client/Data
        Data/Other/Client/Data
        [[ . . .]]
        Data/More/Directories

  Options : *.* /S /E /DCOPY:DA /COPY:DAT /R:1000000 /W:30 

------------------------------------------------------------------------------

Вывод говорит мне, что моя команда отформатирована правильно, и что Robocopy понимает, что я прошу это сделать.

Проблема в том, что он игнорирует список Exc dirs и просто копирует все. Я не хочу исключать весь каталог Data , но только биты внутри него, которые имеют отношение к делу.

Если я использую обратную косую черту (\), то вывод Exc dirs печатается как Data\\testing . Может ли это быть моей проблемой?

1 ответ1

0

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

Любое имя каталога после /xd которое соответствует, исключается. Это имеет смысл, и он функционирует как рекламируется. Похоже, что каждый раз, когда вы даете ему что-то большее, чем просто имя каталога, это мешает. Моя проблема, конечно, не настолько уникальна, когда я смотрю на других людей в Интернете и их проблемы с robocopy .

У меня есть следующие каталоги:

C:\repo\SomeProject\Data             <- DONT exclude this
C:\repo\SomeOtherProject\Data        <- DONT exclude this
C:\repo\AnotherProject\bar           <- DONT exclude this
C:\repo\Data\foo                     <- Exclude this
C:\repo\Data\bar                     <- Exclude this
C:\repo\Data\baz                     <- DONT exclude this
  • Если я вызываю robocopy с /xd Data то C:\repo\SomeProject\Data и C:\repo\SomeOtherProject\Data также будут исключены
  • Если я вызываю robocopy с /xd foo bar то C:\repo\AnotherProject\bar также будет исключен.

Я хочу иметь возможность вызывать robocopy с /xd Data\foo Data\bar чтобы исключить только foo и bar в Data .

Абсолютные пути к файлам не будут работать, потому что код должен быть переносимым, и я не хочу вставлять абсолютные пути для каждой записи в моем списке исключений> 100. Это просто не кажется правильным.

Кажется, что происходит, если я использую /xd Data\bar то robocopy интерпретирует его как Data\\bar который он не может найти. Я не знаю, почему один \ меняется на \\ и любая перестановка \ или / тоже не работает.

Решение

В конечном итоге ответ на мой вопрос заключается в использовании xcopy . Я даю ему список, содержащий записи, такие как *.cpp , 8.vcxproj , \Data\foo\ , \Data\bar\ и еще 100 записей, и он, кажется, работает отлично, исключая все вещи, которые я не хочу, пока держать вещи, которые мне нужны.

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