Я просто не могу найти способ в командной строке сказать «скопируйте все файлы из каталога A в каталог B, но если файл уже существует в каталоге B, не перезаписывайте его, независимо от того, какой файл новее. , и не предлагать мне ".
Я прошел через копирование, перемещение, xcopy и robocopy, и самое близкое, что я могу получить, это то, что вы можете сказать robocopy «копировать A в B, но не перезаписывать новые файлы более старыми файлами», но это не работает для меня . Я посмотрел на xxcopy, но отказался от него, так как я не хочу иметь стороннюю зависимость от события пост-сборки Visual Studio, которое потребует от других пользователей SVN установки этого инструмента для выполнения сборки.
Я хочу добавить командную строку к событию после сборки в Visual Studio 2010, чтобы файлы, созданные из шаблонов T4 для новых объектов модели EF, распределялись по папкам проекта, к которым они принадлежат, но регенерированные файлы для существующих объектов не перезаписывайте потенциально редактируемые файлы назначения.
Поскольку шаблон T4 регенерируется, исходный файл всегда новее, и я не могу надежно использовать переключатель «более новый», я не думаю.
Я использую частичные классы для тех элементов, для которых могу, но есть и другие вещи, которые я генерирую, которые не могут использовать частичные классы (например, создание файла EditorTemplate по умолчанию или DisplayTemplate * .ascx).
У кого-нибудь есть подобные проблемы, которые они решили?
cmd.exe
«Sfor
командой? Если нет, я рекомендую вам запуститьfor /?
и использовать это.Ответы:
источник
~nx
в%~nxF
точности означает?~nxF
переменнойF
превращается в имя файла и расширение.Чтобы уточнить (с использованием ответов Hydrageryrum, HailGallaxar и Энди Шмидта):
/E
заставляет Robocopy рекурсивно копировать подкаталоги, в том числе пустые./XC
исключает существующие файлы с той же меткой времени, но с разными размерами файлов. Robocopy обычно их перезаписывает./XN
исключает существующие файлы новее, чем копия в целевом каталоге. Robocopy обычно их перезаписывает./XO
исключает существующие файлы старше копии в целевом каталоге. Robocopy обычно их перезаписывает.За исключением классов Changed, Older и Newer, Robocopy делает именно то, что хочет исходный плакат - без необходимости загружать среду сценариев.
Ссылки: Technet , Wikipedia
Загрузить с: Ссылка для загрузки Microsoft (ссылка была проверена 30 марта 2016 г.)
источник
/e
? Что, если использовать/s
вместо этого? Мне не нужна куча пустых подпапок.Решение Велисария хорошее.
Чтобы уточнить этот немного краткий ответ:
/E
заставляет Robocopy рекурсивно копировать подкаталоги, в том числе пустые./XC
исключает существующие файлы с той же меткой времени, но с разными размерами файлов. Robocopy обычно их перезаписывает./XN
исключает существующие файлы новее, чем копия в исходном каталоге. Robocopy обычно их перезаписывает./XO
исключает существующие файлы старше копии в исходном каталоге. Robocopy обычно их перезаписывает.За исключением классов Changed, Older и Newer, Robocopy делает именно то, что хочет исходный плакат - без необходимости загружать среду сценариев.
источник
Вы можете попробовать это:
-y
просто запрашивает перед перезаписью, и мы можем передать n на все эти вопросы. По сути, это просто копирует несуществующие файлы. :)источник
copy /-y
просто автоматически не предполагается, что ни разу не закончится ввод stdin. Вы можете опустить первое явное выражениеn
или передать< nul
его по конвейеру , и произойдет то же самое.Вот он в виде пакетного файла:
источник
Я просто хочу кое-что прояснить из своего собственного тестирования.
@Hydragiesrum написал:
На самом деле это наоборот. XN «исключает более новые» файлы, но исключает файлы, которые новее, чем копия в целевом каталоге. XO выполняет «eXclude Older», но исключает файлы, которые старше копии в целевом каталоге.
Конечно, как всегда, проводите собственное тестирование.
источник
Есть странный способ сделать это с помощью xcopy:
Просто включите столько n, сколько копируемых файлов, и он ответит n на все вопросы о перезаписи.
источник
copy
, см. Этот ответ , в частности комментарий @mwfearnley:copy /-y
автоматически предполагает, чтоn
после того, как stdin исчерпан, поэтому вы можете, например,echo n
только один раз, и он все еще работает./ XX: исключить "дополнительные" файлы и каталоги (присутствующие в месте назначения, но не в источнике). Это предотвратит удаление из места назначения. (это по умолчанию)
источник
Robocopy можно скачать здесь для систем, где он еще не установлен. (Т.е. Windows Server 2003.)
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17657 (для установки не требуется перезагрузка)
Не забудьте указать путь к файлу robocopy exe. Для этого щелкните правой кнопкой мыши «мой компьютер»> «Свойства»> «Дополнительно»> «Переменные среды», затем найдите системную переменную пути и добавьте ее в конец: «; C: \ Program Files \ Windows Resource Kits \ Tools» или где угодно установил его. Обязательно оставьте строки переменных пути, которые уже есть, и просто добавьте дополнительный путь.
как только путь установлен, вы можете запустить команду, которую предлагает Велисарий. Отлично работает.
источник
Это не позволит мне напрямую комментировать неправильные сообщения - но позвольте мне просто предупредить всех, что определение параметров / XN и / XO ОТМЕНЕНО по сравнению с тем, что было опубликовано в предыдущих сообщениях.
Параметр «Исключить старые / новые файлы» согласуется с информацией, отображаемой в журнале RoboCopy: RoboCopy будет выполнять итерацию по ИСТОЧНИКУ, а затем сообщать, является ли каждый файл в ИСТОЧНИКе «СТАРШЕ» или «НОВЕЙ», чем файл в месте назначения.
Следовательно, / XO будет исключать файлы СТАРЫЙ ИСТОЧНИК (что интуитивно понятно), а не «старше исходного», как было заявлено здесь.
Если вы хотите скопировать только новые или измененные исходные файлы, но избегаете замены более поздних файлов назначения, тогда / XO - правильный вариант.
источник
Простой подход - использовать параметр / MIR для зеркалирования двух каталогов. Обычно он копирует в место назначения только новые файлы. В следующей команде замените источник и место назначения на пути к вашим папкам, скрипт будет искать любой файл с любыми расширениями.
источник
Это то, что у меня сработало. Я использую это для «добавления» файлов на другой диск без перезаписи.
Пакетный файл: robocopy-missingfiles.bat
Пример:
Сделайте тест перед внедрением.
источник