Копирование файлов без перезаписи



Я просто не могу найти способ в командной строке сказать: "скопируйте все файлы из каталога A в каталог B, но если файл уже существует в каталоге B, не перезаписывайте его, независимо от того, какой файл новее, и не запрашивайте меня."



Я прошел через copy, move, xcopy & robocopy, и самое близкое, что я могу получить, это то, что вы можете сказать robocopy "копировать A В B, но не перезаписывать новые файлы старыми файлами", но это не работает для меня. Я посмотрел на xxcopy, но отбросил это, поскольку я не хочу иметь стороннюю зависимость от события Visual Studio после сборки, которое потребует, чтобы другие пользователи SVN установили этот инструмент для выполнения сборки.



Я хочу добавить командную строку в событие после сборки в Visual Studio 2010, чтобы файлы, созданные из T4 шаблоны для нового эф объекты модели распределяются по папкам проекта, к которым они принадлежат, но восстановленные файлы для существующих объектов этого не делают перезаписать потенциально отредактированные файлы назначения.



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



Я использую частичные классы для тех элементов, для которых я могу, но есть и другие вещи, которые я создаю, которые не могут использовать частичные классы (например, создание EditorTemplate по умолчанию или DisplayTemplate *.файл ascx).



У кого-нибудь есть подобные проблемы, которые они решили?

1069   12  

12 ответов:

For %F In ("C:\From\*.*") Do If Not Exist "C:\To\%~nxF" Copy "%F" "C:\To\%~nxF"

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

    Ничего не найдено.