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
Посмотрите на это в действии
Запустите сохраненный скрипт.
Вы увидите мигающее окно консоли, после закрытия которого единственным признаком того, что оно запущено, будет несколько новых процессов.
Для проверки выполните несколько действий на рабочем столе.
- Завершите созданный процесс PowerShell, если вы больше не хотите, чтобы он работал.
Некоторая справочная информация- Если вы не знакомы с инструментами, использованными в этом ответе.
- Для получения более подробной информации
System.IO.FileSystemWatcher
посетите сайтСтраница MSDN. - Для получения дополнительных примеров событий в PowerShell посетите этот сайт.блог, который я нашел полезным.
- Для начала о Windows PowerShell я нашелэтот сайт будет полезным(Мне нравятся их советы дня).
- Если вы используете старую версию Windows или по какой-то причине у вас не установлен PowerShell, вы можете загрузитьWindows Management Framework 4.0.
решение3
DSynchronizeэто отдельная утилита, которая позволяет вам периодически синхронизировать две или более папок на жестком диске, дискете, локальной сети, USB-ключе, CD-DVD (с пакетной программой записи) и FTP-сервере. Это не совсем то, о чем вопрос, но это самое близкое, что я смог найти.
Я тоже искал решение для минимального времени в 1 минуту в Robocopy и нашел этот вопрос двухлетней давности. В итоге мне посоветовали это программное обеспечение, и я его использую. Для справки, я не имею никакого отношения к этому программному обеспечению.
Плюсы:
- Синхронизация в реальном времени.
- Можно добавить несколько пар папок и выбрать, какие пары будут активны в данный момент, с помощью флажков рядом с ними.
- Нет установщика, автономная программа.
- Вы можете исключать или включать файлы по шаблонам или по времени изменения, нажав кнопку «Фильтр».
- (другие; см. снимок экрана ниже. Флажки и кнопки имеют дополнительные подсказки.)
Минусы:
- Это графическая утилита, параметры командной строки недоступны.
- Все пары папок имеют одинаковые настройки.
Параметр синхронизации в реальном времени отмечен на снимке экрана в разделе «Специальные параметры». Это то, что вопрос, похоже, описывает как цель. Если он не отмечен и у вас не установлен таймер, вы можете нажать кнопку «Синхронизировать», чтобы начать одноразовую синхронизацию.
Как синхронизировать две папки:
- Выберите исходную папку, которую вы хотите отслеживать, с помощью диалогового окна обзора в верхнем левом углу.
- В правом верхнем углу выберите папку, в которую вы хотите скопировать изменения.
- (Необязательно) Если вы вручную ввели путь к папке, а не использовали диалоговое окно обзора, нажмите кнопку «ТЕСТ» между двумя полями вверху, чтобы проверить, существуют ли эти папки на самом деле. В большинстве случаев вам также нужно будет проверить «Создать папку, если она не существует», чтобы убедиться, что новые папки копируются, так как по умолчанию этот флажок не установлен, и поэтому программа по умолчанию копирует только файлы.
- Отметьте галочкой 'Синхронизация в реальном времени'. Синхронизация теперь активна, и все изменения из папки с левой стороны будут скопированы в папку с правой стороны.
Я также нашел этоYouTube видео, который показывает программное обеспечение в действии. Он показывает более старую версию, и опции находятся не в том же месте, но он дает представление о том, как работает программное обеспечение.
решение4
используйте переключатель /MON 1, каждый раз при изменении файла robocopy будет синхронизироваться