Como mover arquivos automaticamente usando script

Publicidade

Às vezes, você pode querer mover automaticamente arquivos de uma pasta para outra, como por exemplo, para organizar os arquivos baixados em pastas específicas. Nesse tutorial vamos ensinar a criar um script que filtra e move automaticamente os arquivos para uma pasta específica utilizando uma tarefa agendada.

Etapa 1 – Criação do script

1. Para começar precisamos criar o script que irá mover os arquivos. Esse é o modelo padrão do script que você irá usar. No modelo abaixo ele está movendo todos os arquivos (*.*) da pasta Soft1 para a pasta Soft2.
With CreateObject("Scripting.FileSystemObject")
.MoveFile "C:\Soft1\*.*", "C:\Soft2\"
End With

2. Copie o script, cole-o no bloco de notas e substitua o caminho C:\Soft1 e C:\Soft2. Para mover arquivos específicos, substitua o *.* por *.extensão. Por exemplo, para mover apenas os arquivos DOCX, use *.docx.

Nota: No exemplo abaixo estou movendo os arquivos .docx da área de trabalho para a pasta Documentos.

3. Clique no menu “Arquivo >Salvar“, selecione Todos os arquivos no campo “Tipo” e salve o arquivo com a extensão .vbs. Se estiver movendo arquivos por tipo, crie scripts para outras extensões que deseja mover.

Etapa  2 – Automação da tarefa

1. Para mover os arquivos automaticamente, vamos criar uma tarefa agendada.Pressione Win + R para abrir a caixa Executar, digite taskschd.msc e clique no botão OK para abrir o agendador de tarefas do Windows.

2. Clique com o botão direito em “Biblioteca do Agendador de Tarefas” e selecione “Criar Tarefa Básica

3. Digite um nome para a tarefa, como por exemplo, “Mover arquivos DOCX” e clique em “Avançar“.

4. Em seguida, defina quando a tarefa deve ser executada e o horário.

5. Marque a opção “Iniciar um Programa” e na tela seguinte clique em “Procurar” e selecione o script .vbs.

6. Por fim, clique em “Concluir” para terminar a criação da tarefa agendada.

7. Pronto, agora ele será executado automaticamente no horário agendado. Se quiser testar o script, clique com o botão direito nele e selecione “Executar” para que a tarefa agendada seja executada imediatamente.

Publicidade

Comentários:

  1. Excelente Sergio

    Aproveitando pedir uma ajuda se possível:

    – Uso o Cobian Backup pra fazer um backup diário (2x no dia) de uma pasta de um sistema; o problema é que depois de uns 15 dias, os backups mais antigos são descartáveis e precisam ser removidos para liberar espaço, mas manualmente.

    Um script desse podia fazer isso? Mover uma pasta pra lixeira baseado na data de criação em vez do nome ou tipo de arquivo?

    Responder
  2. Boa tarde,

    Primeiramente quero agradecer pelo script, estou usando esse script para mover de uma pasta todos os dias, só que as vezes não tem arquivos na pasta ai o script apresenta um erro. Tem como fazer alguma alteração para quando não tiver documentos para serem movidos?

    Responder
    • Ficaria algo assim:

      Const PATH = "C:\Soft1"
      dim fso: set fso = CreateObject("Scripting.FileSystemObject")
      dim folder: set folder = fso.getFolder(PATH)
      If folder.files.Count <> 0 then
      With CreateObject("Scripting.FileSystemObject")
      .MoveFile "C:\Soft1\*.*", "C:\Soft2\"
      End With
      End If

      Responder
      • Boa tarde,

        Muito obrigado pela pronta atenção, resolveu meu problema.

        Responder
      • Boa tarde,

        Estou usando esse script para mover arquivos de uma pasta que tem varias subpastas, gostaria de saber se tem como modificar o arquivo para quando uma dessas subspasta no tiver arquivo para mover, passa para próxima que tem arquivos, por que como esta da erro quando lê uma pasta que nao tem arquivos.

        Responder
        • Não sei como isso pode ser feito. O que eu posso sugerir é que você crie um script para cada pasta específica usando o script de exemplo abaixo:

          Const PATH = "C:\Soft1"
          dim fso: set fso = CreateObject("Scripting.FileSystemObject")
          dim folder: set folder = fso.getFolder(PATH)
          If folder.files.Count <> 0 then
          With CreateObject("Scripting.FileSystemObject")
          .MoveFile "C:\Soft1\*.*", "C:\Soft2\"
          End With
          End If

          Responder
          • Sergio, muito legal seus posts, primeiramente parabéns. Sobre o script acima, eu tenho dois diretórios em um mapeamento de rede, e dois no c:
            Um script irá mover os arquivos do mapeamento para o c: e o outro do C: para o mapeamento, quero adicionar eles no agendador de tarefas, porém quando não há arquivos na pasta da erro, e quando chegar o momento de rodar de novo, vai acumulando erro na tela. Consegue me dizer como resolver?

  3. Tem como fazer o script para ele identificar a extensão sozinho dos arquivos e mover todos com a mesma extensão para uma pasta com o nome da extensão?

    Responder
    • Eu consegui fazer isso usando esse script:

      'set variable
      Dim targetFolder

      'Create object
      targetFolder = "C:\SoftDownload"
      Set fso = CreateObject("Scripting.FileSystemObject")

      For Each file In fso.GetFolder(targetFolder).Files
      If LCase(fso.GetExtensionName(file.Name)) = "txt" Then
      With CreateObject("Scripting.FileSystemObject")
      .MoveFile "C:\SoftDownload\*.txt", "C:\SoftDownload\txt\"
      End With
      End If
      Next

      For Each file In fso.GetFolder(targetFolder).Files
      If LCase(fso.GetExtensionName(file.Name)) = "pdf" Then
      With CreateObject("Scripting.FileSystemObject")
      .MoveFile "C:\SoftDownload\*.pdf", "C:\SoftDownload\pdf\"
      End With
      End If
      Next

      Nesse exemplo, eu crie um script para duas extensões, porém você pode adicionar outras extensões copiando a parte do script que começa em For Each e termina em Next.

      É necessário também criar previamente as pastas para onde os arquivos serão movidos.

      Por fim, note que você precisa alterar o caminho da pasta em targetFolder, na linha .MoveFile e a extensão na linha If LCase.

      Responder
  4. O seu script é bem útil, porém tem um pequeno problema! Se caso houver um arquivo de nome igual dentro da pasta o script, uma vez sendo executado por meio da tarefa agendada, não representa erros e não move o arquivo. Diferentemente se rodado na mão, uma vez que emite uma mensagem de erro! Acredito que com alguns ajustes esse problema estaria resolvido.

    Responder
    • Provavelmente é possível criar uma condição para tratar esses arquivos, como sobrescrever o arquivo na pasta de destino ou renomear o novo arquivo movido, porém no momento não sei como fazer isso.

      Responder
  5. Boa tarde,

    Seria possível utilizar este script para copiar ficheiros de uma pasta do outlook para uma pasta no PC.

    Cumprimentos.
    CR

    Responder
    • Se você estiver falando do Outlook.com, não é possível.

      Se você estiver falando do software Outlook e souber aonde a pasta fica armazenada no disco rígido do computador será possível usá-lo para esse propósito.

      Responder
  6. Bom dia Sérgio,

    Antes de mais obrigado pela ajuda. Pensava que o script poderia mover diretamente do outlook para outra pasta do PC. Não sei a localização da pasta do Outlook no PC.

    Existe alguma forma de localizar a pasta?

    Responder
    • Talvez nas configurações do Outlook você encontre onde os dados são armazenados.

      Responder
  7. Boa tarde,

    Gostaria de saber se tem como alterar esse script para buscar em subpastas e mover para as pastas diferente.

    Exemplo: tenho uma pasta que dentro dela tem varias pastas, queria mover o conteúdo de cada pasta para pasta distintas.

    Responder
    • Sim, basta você adicionar novas linhas, uma embaixo da outra, do comando .MoveFile.

      .MoveFile "C:\Soft1\*.*", "C:\Soft2\"

      Responder
  8. Muito, deu certo, porém agora eu precisava de fazer a mesma coisa só que mover apenas arquivos com mais de 5min que foram criados na pasta.

    Responder
    • Tem com mover arquivos da área de trabalho, todos aqueles que não são ícones de aplicativos para dentro do drive D, que é o drive do meu google drive?

      Responder
  9. Muito útil seus scripts, mas me tira uma duvida por favor, tenho uma impressora fiscal que tem dado um problema com a DLL. Toda vez que eu quero abrir meu sistema reconheço a impressora e tenho que copiar uma nova DLL para a pasta do mesmo, tem alguma forma de eu criar um script que assim que essa DLL for criada (alterada na pasta da impressora) ele os mova sozinho para a pasta do sistema?

    Responder
    • O problema é que o script precisaria ficar rodando continuamente em segundo plano para detectar o arquivo e não sei como fazer isso, talvez você possa usar a função de monitoramento do programa DropIt para fazer isso.

      Outra opção seria você criar um arquivo .bat para copiar o arquivo e depois criar um atalho dele na área de trabalho para copiar o arquivo DLL para a pasta do sistema com apenas um clique.

      Responder
      • Sérgio, obrigado pelo retorno.
        Ffiz o que você disse, criei um .bat e me satisfez totalmente, valeu!!!

        Responder
  10. Bom dia,
    Primeiramente muito obrigado e parabéns!
    Estou precisando de um script parecido com este, porém para arquivos específicos.
    Exemplo:
    Tenho a pasta A, com 3 pdf’s, “projeto1, projeto2, projeto3”.
    Preciso enviar o “projeto1” para a pasta projetos, o PDF “projeto2” para a pasta projetos, e o PDF “projeto3” para a pasta projetos.
    Seria possível fazer um script para isto?

    Responder
    • Sim, crie um script para cada arquivo e especifique o nome do arquivo que deseja copiar em cada sript.

      Responder
      • No mesmo arquivo?
        Eu tentei usando seu código

        With CreateObject(“Scripting.FileSystemObject”)
        .MoveFile “C:\Soft1\*.*”, “C:\Soft2\”
        End With

        Mas criei 2 linhas de .movefile, e especifiquei o nome certinho de cada arquivo, e após a vírgula coloquei a pasta. Mas deu erro. Vc poderia fazer um exemplo por favor? Só do arquivo A para pasta A e B para a pasta B, partindo da mesma pasta.

        Responder
        • Você precisará criar um arquivo .vbs para cada arquivo. Veja os exemplos:

          Projeto1.vbs
          With CreateObject("Scripting.FileSystemObject")
          MoveFile "C:\PDF\projeto1.pdf", "C:\Projeto1\"
          End With

          Projeto2.vbs
          With CreateObject("Scripting.FileSystemObject")
          MoveFile "C:\PDF\projeto2.pdf", "C:\Projeto2\"
          End With

          Responder
  11. Boa Tarde Sergio, espero que ainda veja esse post e consiga me ajudar.

    Quando eu programo uma task, na hora que executa ele abre uma janela para selecionar o programa que eu quero que abra o arquivo, mesmo eu já tendo colocado para o .vbs ser aberto por padrão.

    Você sabe como posso fazer? Porque com esse problema ele não roda a task.

    Responder
    • Boa tarde!

      Quando você clica duas vezes no arquivo .vbs o que acontece?

      Clique com o botão direito no arquivo .vbs que você criou, selecione a opção “Abrir com > Escolher outro aplicativo”. Marque a caixa “Sempre usar esse aplicativo para abrir arquivos .vbs” e selecione o “Microsoft Windows Based Script Host”.

      Responder
  12. Tem como mover apenas arquivos que estejam a X dias na pasta?

    Responder
    • Existe usando um arquivo .bat:

      @echo off
      robocopy C:\Soft1\ C:\Soft2\ /mov /s /minage:30

      Basta alterar o 30 para o número de dias. Nesse exemplo, ele irá mover os arquivos com mais de 30 dias.

      Responder

Deixe o seu comentário: