O Robocopy pode monitorar arquivos em um incremento de tempo de menos de um minuto?

8

Robocopy tem a opção de monitorar o diretório de origem e copie os arquivos que tiverem alterações. Você pode especificar quantas alterações no diretório devem ocorrer antes da cópia ( /mon n , em que n é o número de alterações) e por quanto tempo aguardar antes da nova verificação ( /mot t , em que t é o tempo de espera em minutos) .

Eu gostaria de monitorar uma pasta quase continuamente, já que há apenas um arquivo que estou procurando, e eu quero que as mudanças sejam basicamente instantâneas. Eu não consigo fazer o monitor de robocopy por menos de um minuto. Eu tentei /mot 0.5 e ele falha. Eu também tentei /mot 0 e robocopy apenas sai depois de digitalizar uma vez, sem monitoramento contínuo.

Como posso fazer com que o robocopy digitalize uma pasta quase continuamente, com incrementos de tempo de menos de 1 minuto? Alternativamente, existe alguma outra ferramenta de linha de comando que possa monitorar constantemente uma fonte de arquivo e copiar alterações em tempo real?

    
por nhinkle 31.10.2012 / 20:54

3 respostas

6

Robocopy

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

Como ele aceita apenas alguns minutos como argumento, acho que você não pode forçá-lo a ser executado com mais frequência. Você pode, no entanto, executá-lo usando um arquivo em lotes e deixar o tempo & looping ocorre no arquivo em lote ou em tarefas agendadas, e não em robocopy.

    
por 31.10.2012 / 21:06
10

Suas tags indicam que você está usando o Windows 8. Isso é bom, pois você tem a excelente ferramenta que é o PowerShell e um prático cmdlet chamado Register-ObjectEvent .

Crie um arquivo de texto, altere a extensão para .ps1 , cole o script abaixo no arquivo. Altere a variável $watchedFolder para a pasta que você deseja assistir. Altere a função Do-Something para incluir seu comando robocopy ou o que for. Execute o script, contanto que o script esteja em execução, essa função será executada (quase instantaneamente!) Sempre que um arquivo ou pasta for alterado na pasta monitorada.

Você pode ter esse script executado na inicialização do Windows e ele estará sendo executado em segundo plano em todos os momentos sem usar um timer.

$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

Veja em ação

  1. Execute o script salvo.

  2. Vocêveráumajaneladoconsolepiscar,depoisqueelesfecharem,aúnicaindicaçãoqueestiverexecutandoserãoalgunsnovosprocessos.

  3. Faça algumas coisas na sua área de trabalho para testar.

  4. EncerreoprocessodoPowerShellcriadoquandovocênãoquisermaisqueelesejaexecutado.

Algumasinformaçõesdesegundoplano-Casovocênãoestejafamiliarizadocomasferramentasusadasnestaresposta.

  • ParamaisinformaçõessobreSystem.IO.FileSystemWatcher,visiteosite Página do MSDN .
  • Para mais alguns exemplos de eventos no PowerShell, visite este blog que achei útil .
  • Para uma cartilha no Windows PowerShell, achei este site útil (gosto do dicas do dia).
  • Se você estiver usando uma versão mais antiga do Windows ou, por algum motivo, não tiver o PowerShell instalado, poderá fazer o download do Windows Management Framework 4.0 .
por 20.03.2015 / 07:52
4

DSynchronize é um utilitário autônomo que permite sincronizar periodicamente duas ou mais pastas no disco rígido, disquete, LAN , Chave USB, CD-DVD (com software de gravação de pacotes) e servidor FTP. Não é exatamente sobre a questão, mas a coisa mais próxima que eu encontrei.

Eu também estava procurando uma solução para o tempo mínimo de 1 minuto em Robocopy e encontrei essa pergunta de dois anos. Acabei tendo este software sugerido para mim, e é isso que estou usando. Para o registro, eu não tenho nenhuma afiliação com o software.

Prós:

  • Tem sincronização em tempo real.
  • É possível adicionar vários pares de pastas e escolher quais pares estão ativos em um determinado momento usando as caixas de seleção ao lado deles.
  • Nenhum programa de instalação autônomo.
  • Você pode excluir ou incluir arquivos por meio de padrões ou por tempo modificado clicando no botão "filtro".
  • (outros; veja a captura de tela abaixo. As caixas de seleção e os botões têm dicas de ajuda adicionais).

Contras:

  • É um utilitário GUI, sem opções de linha de comando disponíveis
  • Todos os pares de pastas compartilham as mesmas configurações

Aopçãodesincronizaçãoemtemporealestámarcadanacapturadetelanaseção"Opções especiais". Isso seria o que a pergunta parece descrever como o objetivo. Se não estiver marcado e você não tiver um timer definido, você pode clicar no botão "Sincronizar" para iniciar uma sincronização única.

Como sincronizar duas pastas:

  • Selecione uma pasta de origem que você deseja monitorar usando a caixa de diálogo de navegação no canto superior esquerdo.
  • Selecione uma pasta de destino para a qual você deseja copiar as alterações, no canto superior direito.
  • (Opcional) Se você digitou manualmente o caminho da pasta em vez de usar a caixa de diálogo de procura, clique no botão 'TESTE' entre as duas caixas na parte superior para ver se essas pastas realmente existem. Você também desejará verificar a 'Criar pasta se não existir' na maioria dos casos para garantir que as novas pastas sejam copiadas, pois ela é desmarcada por padrão e, portanto, o programa só copia arquivos por padrão.
  • Marque a caixa de seleção "Realtime sync". A sincronização está agora ativa e todas as alterações da pasta do lado esquerdo serão copiadas para a pasta do lado direito.

Também encontrei este vídeo do YouTube , que mostra o software em ação. Ele mostra uma versão mais antiga e as opções não estão no mesmo lugar, mas dá uma ideia de como o software funciona.

    
por 20.03.2015 / 05:45