Windows CMD - дождитесь окончания копирования файла, затем выполните команду
Я пытаюсь выполнить команду после обнаружения изменения файла. Моя проблема в том, что программа, которую я использую, мгновенно действует, когда файл создается, но копирование не завершено.
Прямо сейчас я использовал timeout /t 180 /nobreak
перед тем, как мой сценарий временно исправит это, а затем запустит нужные мне команды, но это не будет работать для каждого файла, который я делаю, для некоторых потребуется больше 180 секунд.
Я пытаюсь выполнить передачу видеофайлов по локальной сети в общую папку, в которой ПК с общей папкой обнаруживает изменение / создание файла, а затем ожидает полного переноса файла и запускает.bat/.cmd.
Есть какой-либо способ сделать это. Любая помощь очень ценится. Спасибо!
2 ответа
Вы должны смотреть на это с другой точки зрения.
Сценарий, который копирует файл, будет знать, когда передача будет завершена, и может в течение этого времени начинать следующее действие.
Итак, вы хотите выполнить оба действия из одного и того же сценария.
Это дает вам 2 варианта:
Удаленное выполнение
Программа PSExec (может быть загружена с Microsoft) может выполнять программу на целевой машине, если она была запущена с достаточными правами. Его можно использовать для запуска программы на удаленном компьютере после завершения копирования.
Обратная копия
Вы в настоящее время копируете из источника в место назначения. Если вы открываете общий доступ к папке, в которой находится файл, из источника, вы можете также начать копирование на стороне назначения.
Вы можете использовать для синхронизации передачи файлов в режиме мастера (односторонняя синхронизация). Во время передачи файла он создает временный файл и только в случае успеха переименовывает его в фактическое имя файла. Если ваша программа мониторинга будет следить за определенными расширениями файла, она выберет ее при завершении передачи, чтобы вы могли сразу же запустить следующую задачу. Аналогичные действия могут быть выполнены с помощью торрент-совместимых программ (ограниченных вашей локальной сетью), где фактический файл будет отображаться только после завершенных передач.
PS Syncthing
по умолчанию выполняется синхронизация по заданным временным окнам, но если вам нужна немедленная передача, вы можете использовать сопутствующую программу, которая вызывает syncthing-inotify
Таким образом, все, что было изменено / создано / удалено в исходной папке, будет немедленно реплицировано на целевой компьютер.