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

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

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

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

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

решение1

Робокопия

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

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

решение2

В ваших тегах указано, что вы используете 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, если вы больше не хотите, чтобы он работал.

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


решение3

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

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

Плюсы:

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

Минусы:

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

Скриншот

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

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

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

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

решение4

используйте переключатель /MON 1, каждый раз при изменении файла robocopy будет синхронизироваться

Связанный контент