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

10

Robocopytem a opção de monitorar o diretório de origem e copiar sobre qualquer arquivo que tenha alterações. Você pode especificar quantas alterações no diretório devem ocorrer antes de copiar ( /mon nonde nestá o número de alterações) e quanto tempo aguardar antes de digitalizar novamente ( /mot tonde testá o tempo de espera em minutos).

Gostaria de monitorar uma pasta quase continuamente, pois há apenas um arquivo que estou procurando e quero que as alterações sejam basicamente instantâneas. Não consigo fazer o monitor de robocópia por um período de tempo inferior a um minuto. Eu tentei /mot 0.5e falha. Também tentei /mot 0e o robocopy sai apenas após a digitalização uma vez, sem monitorar continuamente.

Como faço para a robocopy digitalizar uma pasta quase continuamente, com incrementos de tempo inferiores a 1 minuto? Como alternativa, existe alguma outra ferramenta de linha de comando que possa monitorar constantemente uma fonte de arquivo e copiar alterações em tempo real?

nhinkle
fonte
PRECISA ser Robocopy?
`` Responder # 1 em
@ techie007 se houver algo que atenda aos mesmos requisitos, tudo bem, embora eu queira evitar ferramentas de terceiros, se possível. Mas se houver uma solução perfeita de terceiros, estou disposto a considerá-la.
Nhinkle 31/10/12
@ techie007 - Estou com o mesmo problema exato do nhinkle e estou usando o Robocopy da mesma maneira exata. Se você conhece uma solução alternativa que funciona bem no Windows, estou aberto a ela. Por favor, compartilhe conosco
Durden81
Testando o Freefilesync agora .. parece ser a ferramenta que eu precisava.
Durden81

Respostas:

8

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 executar com mais frequência. No entanto, você pode executá-lo usando um arquivo em lotes e permitir que o tempo e o loop ocorram no arquivo em lotes ou nas tarefas agendadas, e não na robocópia.

Anirudh Ramanathan
fonte
11
sim, eu uso "ping -n 1 -w 500 1.2.3.4> NUL" a metade sono um segundo, então loop-lo com um: LABEL e uma declaração GOTO (cmd)
Stig Eide
13

Suas tags afirmam que você está usando o Windows 8. Isso é bom, pois você tem a ótima ferramenta que é o PowerShell e um pequeno cmdlet útil chamado Register-ObjectEvent.

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

Você poderia executar esse script na inicialização do Windows e ele seria executado em segundo plano o tempo todo 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.
    Execute o script salvo.

  2. Você verá uma janela do console piscando. Após o fechamento, a única indicação de que está sendo executada será alguns novos processos.
    insira a descrição da imagem aqui

  3. Faça algumas coisas na área de trabalho para testar.
    insira a descrição da imagem aqui

  4. Finalize o processo do PowerShell criado quando não desejar mais que ele seja executado.

Algumas informações básicas - Caso você não esteja familiarizado com as ferramentas usadas nesta resposta.


  • Para mais informações System.IO.FileSystemWatcher, visite a 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 (eu gosto das 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á baixar o Windows Management Framework 4.0 .
Joseph
fonte
11
Esta é a melhor resposta. Essa solução é orientada a eventos, o que significa que nunca usa a CPU até que ocorra uma alteração e, em seguida, o programa é executado imediatamente em resposta. Além disso, excelente redação.
CoolHandLouis
5

O DSynchronize é um utilitário independente 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 no servidor FTP. Não é exatamente do que se trata, mas a coisa mais próxima que pude encontrar.

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

Prós:

  • Possui sincronização em tempo real.
  • Pode adicionar vários pares de pastas e escolher quais pares estão ativos em um determinado momento usando as caixas de seleção próximas a eles.
  • Nenhum instalador, programa independente.
  • Você pode excluir ou incluir arquivos por meio de padrões ou por horário 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 adicionais de ajuda.)

Contras:

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

captura de tela

A opção de sincronização em tempo real está marcada na captura de tela na seçã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 cronômetro definido, clique 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 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 navegação, clique no botão 'TESTE' entre as duas caixas na parte superior para ver se essas pastas realmente existem. Você também deve marcar a opção 'Criar pasta, se não existir', na maioria dos casos, para garantir que novas pastas sejam copiadas, pois ela está desmarcada por padrão e, portanto, o programa copia arquivos por padrão.
  • Marque a caixa de seleção "Sincronização em tempo real". 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.

Eu 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 fornece uma ideia de como o software funciona.

Ashley Wilson
fonte
A pergunta pergunta como fazer algo acontecer (no Robocopy). É bom sugerir uma solução alternativa, explicando como obter o mesmo resultado usando outra ferramenta. No entanto, isso não explica como realmente resolver o problema.
fixer1234
@ fixer1234 Inicialmente, eu estava planejando comentar sobre a pergunta, mas aparentemente minha conta é nova demais para fazer isso (posso comentar sobre minha própria resposta, aparentemente). Eu também estava procurando uma solução para o tempo mínimo de 1 minuto em robocópia e encontrei essa pergunta de dois anos. Acabei sugerindo o software acima, e é isso que estou usando. Pensou que outros na mesma situação achariam útil, isso é tudo. Para uma tarefa aparentemente simples (pasta de sincronização), é incrível o quanto você tem que pesquisar para encontrar uma solução ..
Ashley Wilson
Quanto à clareza da minha resposta - eu gostaria de poder anexar a captura de tela (novamente, a conta é nova demais para permitir isso), o que tornaria muito mais claro - é uma GUI de tela única e todas as opções são claramente visíveis e simples para entender.
Ashley Wilson
Se você usa qualquer serviço de compartilhamento de arquivos, basta adicionar um link à sua imagem e alguém o incorporará. Se você não usa regularmente, existem muitos gratuitos (como imgur.com).
fixer1234
Esta é a captura de tela: i.imgur.com/F7heg9A.png
Ashley Wilson