Копирование файлов без перезаписи
Я просто не могу найти способ в командной строке сказать: "скопируйте все файлы из каталога A в каталог B, но если файл уже существует в каталоге B, не перезаписывайте его, независимо от того, какой файл новее, и не запрашивайте меня."
Я прошел через copy, move, xcopy & robocopy, и самое близкое, что я могу получить, это то, что вы можете сказать robocopy "копировать A В B, но не перезаписывать новые файлы старыми файлами", но это не работает для меня. Я посмотрел на xxcopy, но отбросил это, поскольку я не хочу иметь стороннюю зависимость от события Visual Studio после сборки, которое потребует, чтобы другие пользователи SVN установили этот инструмент для выполнения сборки.
Я хочу добавить командную строку в событие после сборки в Visual Studio 2010, чтобы файлы, созданные из T4 шаблоны для нового эф объекты модели распределяются по папкам проекта, к которым они принадлежат, но восстановленные файлы для существующих объектов этого не делают перезаписать потенциально отредактированные файлы назначения.
поскольку шаблон T4 восстанавливается, исходный файл всегда новее, и я не могу использовать" новый " переключатель надежно, я не думаю.
Я использую частичные классы для тех элементов, для которых я могу, но есть и другие вещи, которые я создаю, которые не могут использовать частичные классы (например, создание EditorTemplate по умолчанию или DisplayTemplate *.файл ascx).
У кого-нибудь есть подобные проблемы, которые они решили?
12 ответов:
Robocopy,или "надежная копия файла", является командой репликации каталога командной строки. Он был доступен как часть набора ресурсов Windows, начиная с Windows NT 4.0, и был представлен как стандартная функция Windows Vista, Windows 7 и Windows Server 2008.
robocopy c:\Sourcepath c:\Destpath /E /XC /XN /XOчтобы разработать (используя Hydrargyrum, HailGallaxar и ответы Энди Шмидта):
/Eделает программы рекурсивно копировать подкаталоги, в том числе и пустые./XCисключает существующие файлы с времени, но разные размер файла. Программы обычно перезаписывает./XNисключает существующие файлы новыми чем копия в пункте назначения справочник. В Robocopy нормально переписывает их./XOисключает существующие файлы старше чем копия в пункте назначения справочник. В Robocopy нормально переписывает их.С Измененные, старые и новые классы исключены, Robocopy делает именно то, что хочет оригинальный плакат - без необходимости загружать среду сценариев.
ссылки: Technet,Википедия
Скачать с сайта: Ссылка Для Загрузки Microsoft(ссылка последний раз проверена 30 марта 2016 года)
решение Велисария хорошо.
чтобы уточнить этот немного краткий ответ:
/Eделает команды Robocopy копировать рекурсивно в подкаталогах, в том числе и пустые./XCисключает существующие файлы с времени, но разные размер файла. Программы обычно перезаписывает./XNисключает существующие файлы новыми чем копия в исходнике справочник. В Robocopy нормально переписывает их./XOисключает существующие файлы старше чем копия в исходнике справочник. В Robocopy нормально переписывает их.с измененными, старыми и новыми исключенными классами Robocopy делает именно то, что хочет оригинальный плакат - без необходимости загружать среду сценариев.
Вы можете попробовать это:
echo n | copy /-y <SOURCE> <DESTINATION>
-yпросто запрашивает перед перезаписью, и мы можем передать N НА ВСЕ эти вопросы. Так это по сути просто скопировать несуществующие файлы. :)
вот он в виде пакетного файла:
@echo off set source=%1 set dest=%2 for %%f in (%source%\*) do if not exist "%dest%\%%~nxf" copy "%%f" "%dest%\%%~nxf"
есть странный способ сделать это с помощью xcopy:
echo nnnnnnnnnnn | xcopy /-y source targetпросто включите столько n, сколько файлов вы копируете, и он ответит n на все вопросы перезаписи.
Я просто хочу прояснить кое-что из моего собственного тестирования.
@Hydrargyrum писал:
- /XN исключает существующие файлы, более новые, чем копия в исходном каталоге. Программы обычно перезаписывает.
- /XO исключает существующие файлы старше копии в исходном каталоге. Программы обычно перезаписывает.
Это на самом деле назад. XN "исключает новые" файлы, но он исключает файлы, которые являются более новыми, чем копия в элемент назначения. XO делает "исключить старые", но он исключает файлы, которые старше, чем копия в назначения.
конечно, сделайте свой собственный тест, как всегда.
robocopy src dst /MIR /XX/ XX: исключить "лишние" файлы и dirs (присутствует в месте назначения, но не в источнике). Это позволит избежать каких-либо удалений от пункта назначения. (это значение по умолчанию)
Robocopy можно скачать здесь для систем, где он еще не установлен. (Т. е. Windows Server 2003.)
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17657 (перезагрузка не требуется для установки)
Не забудьте установить свой путь к Robocopy exe. Вы делаете это, щелкнув правой кнопкой мыши "Мой Компьютер" > Свойства>дополнительно> "Переменные среды" , затем найдите системную переменную path и добавьте ее в конец:"; C:\Program Files\Windows Resource Kits\Tools " или там, где вы его установили. Не забудьте оставить строки переменной path, которые уже есть, и просто добавьте дополнительный путь.
Как только путь установлен, вы можете запустить команду, которую предлагает Велисарий. Он отлично работает.
Это не позволит мне комментировать непосредственно неправильные сообщения - но позвольте мне просто предупредить всех, что определение параметров /XN и /XO перевернуто по сравнению с тем, что было опубликовано в предыдущих сообщениях.
опция исключить Старые / новые файлы согласуется с информацией, отображаемой в журнале RoboCopy: RoboCopy будет перебирать источник, а затем сообщать, является ли каждый файл в источнике "старше" или "новее", чем файл в файле назначение.
следовательно, /XO будет исключать старые исходные файлы (что интуитивно понятно), а не "старше источника", как было заявлено здесь.
Если вы хотите скопировать только новые или измененные исходные файлы, но не заменять более свежие файлы назначения, то /XO является правильным вариантом для использования.
простым подходом было бы использовать параметр /MIR, чтобы отразить два каталога. В основном он будет копировать только новые файлы в пункт назначения. В следующей команде замените источник и назначение на пути к вашим папкам, скрипт будет искать любой файл с любыми расширениями.
robocopy <source directory> <destination directory> *.* /MIR
это то, что сработало для меня. Я использую это ,чтобы" добавить " файлы на другой диск, без перезаписи.
пакетный файл: robocopy-missingfiles.летучая мышь
@echo off echo Copying echo "%1" echo to "%2" echo. echo Press Cntr+C to abort Pause echo. @echo on robocopy %1 %2 /Xo /XN /XC /J /SL /S /MT:8 /R:1 /W:1 /V /DCOPY:DAT /ETA /COPY:DATO /FFT /A-:SH /XD $RECYCLE.BIN "System Volume Information"пример:
robocopy-missingfiles.bat f:\Working-folder\ E:\Backup-folder\сделать тест перед реализацией.
Comments