Может ли Robocopy контролировать файлы с шагом менее одной минуты?

10

Robocopyимеет возможность контролировать исходный каталог и копировать любые файлы, которые имеют изменения. Вы можете указать, сколько изменений в каталоге должно произойти перед копированием ( /mon nгде nнаходится количество изменений) и сколько времени ждать перед повторным сканированием ( /mot tгде tвремя ожидания в минутах).

Я хотел бы отслеживать папку почти непрерывно, так как я сканирую только один файл, и я хочу, чтобы изменения были в основном мгновенными. Я не могу сделать монитор Robocopy менее, чем за одну минуту. Я пытался, /mot 0.5и это не удается. Я также пытался /mot 0и robocopy просто выходит после сканирования один раз, без постоянного мониторинга.

Как я могу сделать робокопию сканирования папки почти непрерывно с шагом менее 1 минуты? В качестве альтернативы, есть ли другой инструмент командной строки, который может постоянно отслеживать источник файла и копировать изменения в режиме реального времени?

nhinkle
источник
Должен ли быть Robocopy?
Ƭᴇcʜιᴇ007
@ techie007, если есть что-то еще, удовлетворяющее тем же требованиям, это было бы хорошо, хотя я хотел бы по возможности избегать сторонних инструментов. Но если есть идеальное решение от стороннего производителя, я готов его рассмотреть.
nhinkle
@ techie007 - У меня та же проблема, что и у nhinkle, и я использую Robocopy точно так же. Если вы знаете альтернативное решение, которое хорошо работает в Windows, я открыт для него. Пожалуйста, поделитесь им с нами
Durden81
Тестирую Freefilesync сейчас .. кажется, это инструмент, который мне нужен.
Durden81

Ответы:

8

Robocopy

/mot:<M>
Monitors source, and runs again in M minutes if changes are detected.

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

Анируд Раманатан
источник
1
да, я использую "ping -n 1 -w 500 1.2.3.4> NUL", чтобы поспать полсекунды, затем зациклить его с помощью: LABEL и оператора GOTO (в cmd)
Stig Eide
13

В ваших тегах указано, что вы используете Windows 8. Это хорошо, поскольку у вас есть отличный инструмент PowerShell и удобный маленький командлет с именем Register-ObjectEvent.

Создайте текстовый файл, измените расширение на .ps1, вставьте приведенный ниже скрипт в файл. Измените $watchedFolderпеременную на папку, которую вы хотите посмотреть. Измените функцию Do-Something, включив в нее команду robocopy или любую другую. Запустите сценарий, если он запущен, и эта функция будет запускаться (почти мгновенно!) При изменении файла или папки в отслеживаемой папке.

Вы можете запустить этот скрипт при запуске Windows, и он будет работать в фоновом режиме без использования таймера.

$block = {    
    function Do-Something
    {
        param ($message, $event)
        # function to call when event is raised
        # do a robocopy or whatever

        Start-Process cmd.exe "/C echo $("{0} {1}" -f $event.SourceEventArgs.FullPath, $message)&pause"
    }

    $watchedFolder = "C:\Users\Admin-PC\Desktop"
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = $watchedFolder

    Register-ObjectEvent -InputObject $watcher -EventName Created -SourceIdentifier File.Created -Action { Do-Something "Created" $event }
    Register-ObjectEvent -InputObject $watcher -EventName Deleted -SourceIdentifier File.Deleted -Action { Do-Something "Deleted" $event }
    Register-ObjectEvent -InputObject $watcher -EventName Changed -SourceIdentifier File.Changed -Action { Do-Something "Changed" $event }
    Register-ObjectEvent -InputObject $watcher -EventName Renamed -SourceIdentifier File.Renamed -Action { Do-Something "Renamed" $event }
}

$encodedBlock = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($block))

Start-Process PowerShell.exe -verb Runas -argumentlist '-WindowStyle Hidden', '-NoExit', '-EncodedCommand', $encodedBlock

Увидеть его в действии


  1. Запустите сохраненный скрипт.
    Запустите сохраненный скрипт.

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

  3. Сделайте что-нибудь на своем рабочем столе для тестирования.
    введите описание изображения здесь

  4. Завершите созданный процесс PowerShell, когда вы больше не хотите его запускать.

Немного справочной информации - на случай, если вы не знакомы с инструментами, использованными в этом ответе.


  • Для получения дополнительной информации, System.IO.FileSystemWatcherпожалуйста, посетите страницу MSDN .
  • Еще несколько примеров событий в PowerShell можно найти в этом блоге, который я нашел полезным .
  • Для начинающих по Windows PowerShell я нашел этот сайт полезным (мне нравятся их советы дня).
  • Если вы используете более старую версию Windows или по какой-то причине у вас не установлен PowerShell, вы можете загрузить Windows Management Framework 4.0 .
Джозеф
источник
1
Это лучший ответ. Это решение основано на событиях, что означает, что оно никогда не использует процессор, пока не произойдет изменение, а затем программа запускается сразу же в ответ. Также отличная рецензия.
CoolHandLouis
5

DSynchronize - это отдельная утилита, которая позволяет периодически синхронизировать две или более папок на жестком диске, дискете, в локальной сети, на USB-ключе, CD-DVD (с программным обеспечением для записи пакетов) и на FTP-сервере. Дело не совсем в том, о чем идет речь, а в том, что я смог найти.

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

Плюсы:

  • Имеет синхронизацию в реальном времени.
  • Можно добавлять несколько пар папок и выбирать, какие пары активны в данный момент, используя флажки рядом с ними.
  • Нет установщика, отдельная программа.
  • Вы можете исключить или включить файлы с помощью шаблонов или измененного времени, нажав кнопку «Фильтр».
  • (другие; см. скриншот ниже. Флажки и кнопки имеют дополнительные подсказки.)

Минусы:

  • Утилита с графическим интерфейсом, переключатели командной строки недоступны
  • Все пары папок имеют одинаковые настройки

Скриншот

Параметр синхронизации в реальном времени отмечен на скриншоте в разделе «Специальные параметры». Это было бы тем, что вопрос, кажется, описывает как цель. Если он не отмечен и у вас не установлен таймер, то вы можете нажать кнопку «Синхронизировать», чтобы начать однократную синхронизацию.

Как синхронизировать две папки:

  • Выберите исходную папку, которую вы хотите отслеживать, используя диалог обзора в верхнем левом углу.
  • Выберите папку назначения, в которую вы хотите скопировать изменения, в правом верхнем углу.
  • (Необязательно) Если вы вручную указали путь к папке, а не с помощью диалогового окна обзора, нажмите кнопку «ТЕСТ» между двумя полями вверху, чтобы увидеть, существуют ли эти папки на самом деле. Вы также захотите проверить «Создать папку, если она не существует» в большинстве случаев, чтобы удостовериться, что новые папки копируются, поскольку по умолчанию она не отмечена, и поэтому программа только копирует файлы по умолчанию.
  • Установите флажок «Синхронизация в реальном времени». Синхронизация теперь активна, и все изменения из левой папки будут скопированы в правую папку.

Я также нашел это видео на YouTube , которое показывает программное обеспечение в действии. Он показывает более старую версию и варианты не в том же месте, но он дает представление о том, как работает программное обеспечение.

Эшли Уилсон
источник
Вопрос в том, как заставить что-то произойти (в Robocopy). Можно предложить альтернативное решение, объясняющее, как добиться того же результата, используя другой инструмент. Однако это не объясняет, как на самом деле решить проблему.
fixer1234
@ fixer1234 Первоначально я только планировал прокомментировать вопрос, но, видимо, моя учетная запись слишком нова для этого (очевидно, я могу прокомментировать свой собственный ответ). Я тоже искал решение минимального времени в 1 минуту в робокопии и нашел этот двухлетний вопрос. В итоге мне предложили вышеуказанное программное обеспечение, и именно это я и использую. Думаю, что другие в такой же ситуации сочтут это полезным, вот и все. Для, казалось бы, простой задачи (синхронизация папок), просто удивительно, сколько нужно искать, чтобы найти решение ..
Эшли Уилсон,
Что касается ясности моего ответа - я бы хотел прикрепить снимок экрана (опять же, учетная запись слишком новая, чтобы допустить это), что сделало бы его более понятным - это графический интерфейс с одним экраном, и все параметры хорошо видны и просты понять.
Эшли Уилсон
Если вы используете какую-либо службу обмена файлами, просто добавьте ссылку на свое изображение, и кто-то вставит ее для вас. Если вы не используете его регулярно, есть много бесплатных (например, imgur.com).
fixer1234
Это скриншот: i.imgur.com/F7heg9A.png
Эшли Уилсон,