Windows: quando novos arquivos aparecerem em uma pasta, execute uma ação e mova-os para uma pasta diferente

2

Gostaria de fazer o seguinte em um ambiente Windows:

monitore uma pasta para a aparência de novo (s) arquivo (s), quando tais arquivos aparecerem, mova-os para uma pasta diferente. Não precisa necessariamente ocorrer em tempo real, mas gostaria de mantê-lo dentro de, digamos, 15 minutos do aparecimento do arquivo.

No Linux, existe um gancho de kernel para monitorar em tempo real a aparência de novos arquivos em um diretório, não sei se algo semelhante existe no Windows, ou se seria mesmo uma solução desejável. Eu gostaria de algumas sugestões sobre como conseguir isso. Eu uso o rsync regularmente no Linux; é tão confiável no Windows? Mais importante, o rsync é capaz de lidar com uma situação em que um arquivo apareceu mas ainda não foi completamente escrito - neste caso o rsync (ou outra ferramenta) pode esperar até que o arquivo seja completamente escrito antes de tentar movê-lo?

Tenho certeza de que outros administradores de sistemas tiveram que lidar com esse tipo de problema, então, em vez de reinventar a roda eu mesmo, gostaria de ouvir o que os outros fizeram.

    
por Michael Martinez 11.08.2014 / 23:37

5 respostas

1

Você provavelmente poderia fazer isso com algo parecido com esse arquivo em lotes:

:loop

ping 127.0.0.1
move "f:\path\*.ext" "g:\path\"

GOTO loop

Não é inteligente nem bonito, mas eu mesmo o uso de vez em quando.

    
por 11.08.2014 / 23:47
1

Robocopy deve fazer isso, mas aviso: eu nunca tentei isso sozinho.

Aqui está um link para uma pergunta anterior que deve ter algum bom ansers para você. Dessa forma, você pode usar uma ferramenta incorporada ao Windows e não precisar mexer com scripts em lote e coisas do tipo.

Se isso acabar funcionando para você, definitivamente volte e poste! Estou muito interessado em ver como a implementação funciona.

    
por 12.08.2014 / 04:17
1

Você pode atenuar o problema de conclusão de arquivo enviando um segundo arquivo, mesmo vazio, após a conclusão do arquivo real. O observador de arquivos deve verificar esse arquivo de acionamento, enquanto o script manipula o arquivo de dados.

    
por 12.08.2014 / 23:12
0

Se me deparo com problemas como este e não encontro uma solução adequada e compreensível online, utilizo as minhas capacidades de programação (limitadas) para encontrar uma solução.

Neste caso, você tem sorte que existe uma classe .Net fornecida pela Microsoft, chamada "FileSystemWatcher", mas infelizmente não verifica a conclusão da cópia (apenas crie, altere e exclua eventos).

No entanto, encontrei isto: link

Esse cara escreveu um violino que verifica a pasta que você especificou para novas criações de arquivo e continua processando o que você quiser quando o arquivo estiver completo (tentando abri-lo em um determinado intervalo que não funcionará se o arquivo ainda estiver sendo escrito).

No código dado, você pode inserir seu comando move-files-after após "// Start processing ..".

Eu sei que essa não é a solução mais fácil, mas funciona como você pretendia e eu não encontrei uma ferramenta que faça isso para você e, considerando o fato de que isso é muito fácil de programar, você precisa copiar & cole você é mais seguro como você seria se você pegasse qualquer programa aleatório da internet.

    
por 12.08.2014 / 01:17
0

O System Center Orchestrator funciona muito bem para isso. Aqui está a documentação da Microsoft sobre isso. link

    
por 12.08.2014 / 18:36

Tags