Вопрос

Я просто не могу найти путь в командной строке, чтобы сказать «Скопируйте все файлы из каталога A в каталог b, но если файл уже существует в каталоге B, не переписать его, независимо от того, какой файл новее И не подскажите меня.

Я прошел с помощью копии, перемещения, XCopy & Robocopy, а самая близкая, которую я могу получить, это то, что вы можете сказать Robocopy «скопировать A до B, но не перезаписать новые файлы со старыми файлами», но это не работает для меня Отказ Я посмотрел на XXCOPY, но выбросил его, так как я не хочу иметь стороннюю зависимость от события Visual Studio Post-Build, который потребует других пользователей SVN, чтобы установить этот инструмент для выполнения сборки.

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

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

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

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

Это было полезно?

Решение

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

Другие советы

Робокопия, Или «Combust File Copy» - это команда репликации каталогов командной строки. Он был доступен как часть комплекта Resource Windows, начиная с Windows NT 4.0, и был введен в качестве стандартной функции Windows Vista, Windows 7 и Windows Server 2008.

   robocopy c:\Sourcepath c:\Destpath /E /XC /XN /XO

Для разработки (используя гидраргирум, Hailgallaxar и Andy Schmidt ответы):

  • /E Делает RoboCopy рекурсивно копировать подкаталоги, включая пустые.
  • /XC Исключает существующие файлы с ту же временем, но разные размеры файлов. Robocopy обычно перезаписывает тех.
  • /XN
  • /XO исключает существующие файлы старше копии в каталоге назначения. Robocopy обычно перезаписывает тех.

С измененными, старше и более новыми классами исключены, Robocopy выполняет именно то, что требует оригинального плаката - без необходимости загружать среду сценариев.

Рекомендации: Телеп, Википедия
Microsoft скачать ссылку

Решение Belisarius 'это хорошо.

Чтобы уточнить этот немного краткий ответ:

  • /E Делает RoboCopy рекурсивно копировать подкаталоги, включая пустые.
  • /XC Исключает существующие файлы с ту же временем, но разные размеры файлов. Robocopy обычно перезаписывает тех.
  • /XN исключает существующие файлы, новее, чем копия в исходном каталоге. Robocopy обычно перезаписывает тех.
  • /XO исключает существующие файлы старше копирования в исходном каталоге. Robocopy обычно перезаписывает тех.

С измененными, старше и более новыми классами исключены, Robocopy выполняет именно то, что требует оригинального плаката - без необходимости загружать среду сценариев.

Вы можете попробовать это:

echo n | copy /-y <SOURCE> <DESTINATION>

-y Просто подсказывает перед перезаписью, и мы можем использовать все эти вопросы. Так что это будет иметь в сущности, просто скопируйте несуществующие файлы. :)

Вот оно в форме пакетных файлов:

@echo off
set source=%1
set dest=%2
for %%f in (%source%\*) do if not exist "%dest%\%%~nxf" copy "%%f" "%dest%\%%~nxf"

Я просто хочу уточнить что-то из моего собственного тестирования.

@Hydrargyrum писал:

  • / Xn исключает существующие файлы, новее, чем копия в исходном каталоге. Robocopy обычно перезаписывает тех.
  • / XO исключает существующие файлы старше, чем копия в исходном каталоге. Robocopy обычно перезаписывает тех.

Это на самом деле назад. Xn делает «исключать новые» файлы, но он исключает файлы, которые являются более новыми, чем копия в пункт назначения каталог. XO делает «исключать старше», но он исключает файлы, которые старше копии в пункт назначения каталог.

Конечно, сделайте свое собственное тестирование как всегда.

Есть странный способ сделать это с XCOPY:

echo nnnnnnnnnnn | xcopy /-y source target

Просто включайте столько N в качестве файлов, которые вы копируете, и это ответит на все вопросы перезаписи.

robocopy src dst /MIR /XX

/ XX: исключить «дополнительные» файлы и нарисовать (присутствующие в месте назначения, но не источника). Это предотвратит любые удаления из пункта назначения. (Это по умолчанию)

Robocopy можно скачать здесь для систем, где она уже не установлена. (Т.е. Windows Server 2003.)

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17657.(Нет перезагрузки не требуется для установки)

Не забудьте установить свой путь к EXE Robocopy. Вы делаете это, щелкнув правой кнопкой мыши «Мой компьютер»> «Свойства> Advanced>» «Переменные среды», затем найдите систему переменной пути и добавьте его в конец: «C: Program Files Windows Kits Tools» или где бы вы ни установил это. Обязательно покините строки переменной пути, которые уже есть и просто добавляют дополнительный путь.

Как только путь установлен, вы можете запустить команду, которую предлагает Belisarius. Работает отлично.

Это не позволит мне комментировать непосредственно на неверных сообщениях - но позвольте мне просто предупредить всех, что определение параметров / xn и / xo перевернуты по сравнению с тем, что было размещено в предыдущих сообщениях.

Опция Exclude Exclude Exclude / Newier в соответствии с информацией, отображаемой в ведении регистрации Robocopy: Robocopy произойдет через источник, а затем сообщает, является ли каждый файл в источнике «старше» или «новее», чем файл в пункте назначения.

Следовательно, / xo исключает старые исходные файлы (что интуитивно понятно), а не "старше источника", как было заявлено здесь.

Если вы хотите скопировать только новые или измененные исходные файлы, но избегайте замены более поздних файлов назначения, то / XO является правильной опцией для использования.

Простой подход будет использовать опцию / MIR, чтобы отразить два каталога. В основном это будет копировать только новые файлы в пункт назначения. В следующих командах замены источника и назначения с путями к папкам, скрипт будет искать любой файл с любыми расширениями.

robocopy <source directory> <destination directory> *.* /MIR

Это то, что работало для меня. Я использую это для «Добавить» файлы на другой диск, без перезаписи.

Пакетный файл: Robocopy-Proactfilefiles.bat

@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\

Проверьте проверку перед внедрением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top