none
Script para copiar arquivos e criar pasta todos da mesma data RRS feed

  • Pergunta

  • Olá galera

    Estou precisando simplificar alguns processos na empresa que eu trabalho, e queria contar com a ajuda de vocês.

    O que está acontecendo é o seguinte, todos os dias tenho que separar arquivos de varios tipos de 4 filiais (txt, pdf, xml) e tenho que selecionar todos por data e criar uma pasta para cada um separado. Queria saber si à algum script que possa simplificar esse processo, algo que copie os arquivos de uma determinada data e crie uma pasta com as datas e copie os arquivos para a pasta correspondente a sua data.

    Espero contar com a ajuda de vocês, desde já obrigado.


    Não deixe de classificar a ou as mensagens como "respondido”, caso tenha ajudado. Fazendo isso, você estará ajudando outros usuários do Fórum a identificar qual ou quais foram as soluções aplicadas na correção do problema.
    segunda-feira, 5 de abril de 2010 16:57

Respostas

  • Segue script:

    On Error Resume Next
      Dim fso, folder, files, sOrigem, sDestino, s_Destino_Org, file
     
      Set fso = CreateObject("Scripting.FileSystemObject")
      sOrigem = Wscript.Arguments.Item(0)
      sDestino = Wscript.Arguments.Item(1)

      If sOrigem = "" Then
          Wscript.Echo "Passe o parametro pasta Origem"
          Wscript.Quit
      End If

      If sDestino = "" Then
          Wscript.Echo "Passe o parametro pasta Destino"
          Wscript.Quit
      End If

      Set NewFile = fso.CreateTextFile(sFolder&"\FileList.txt", True)
      Set folder = fso.GetFolder(sOrigem)
      Set files = folder.Files
     
      For each folderIdx In files
        If not fso.FolderExists(sDestino & "\" & Year(folderIdx.datecreated)) Then
            fso.CreateFolder(sDestino & "\" & Year(folderIdx.datecreated))
        End If

        If not fso.FolderExists(sDestino & "\" & Year(folderIdx.datecreated) & "\" & Month(folderIdx.datecreated)) Then
           fso.CreateFolder(sDestino & "\" & Year(folderIdx.datecreated) & "\" & Month(folderIdx.datecreated))
        End If

        If not fso.FolderExists(sDestino & "\" & Year(folderIdx.datecreated) & "\" & Month(folderIdx.datecreated) & "\" & Day(folderIdx.datecreated)) Then
           fso.CreateFolder(sDestino & "\" & Year(folderIdx.datecreated) & "\" & Month(folderIdx.datecreated) & "\" & Day(folderIdx.datecreated))
        End If
           
        sDestino_Org = sDestino & "\" & Year(folderIdx.datecreated) & "\" & Month(folderIdx.datecreated) & "\" & Day(folderIdx.datecreated) & "\"
        file = folder & "\" & folderIdx.Name
         fso.CopyFile file, SDestino_Org
         fso.DeleteFile(file)

       
      Next

    Chame o script com os parametros pasta de Origem e destino, exemplo:

    Script.vbs "C:\origem" "c:\Destino"

    Teste antes com outra pasta e qualquer duvida poste

     


    Gabriel Nascimento MCP / MCSA / CCNA Não esqueça de contribuir para organização dos fóruns - Classifique as respostas
    • Marcado como Resposta _Dener_ segunda-feira, 5 de abril de 2010 21:16
    segunda-feira, 5 de abril de 2010 19:09
  • Se quiser alterar para fazer pela data de modificação basta alterar datecreated por DateLastModified.

    Se for util vote e feche o thread.

    Qualquer coisa só postar.

    Abraços


    Gabriel Nascimento MCP / MCSA / CCNA Não esqueça de contribuir para organização dos fóruns - Classifique as respostas
    • Marcado como Resposta _Dener_ segunda-feira, 5 de abril de 2010 21:15
    segunda-feira, 5 de abril de 2010 20:06

Todas as Respostas

  • Dener,

     

    Você precisa organizar por extensão e data de criação?

    Como ficariam os nomes das pastas, a estrutura?

     


    Gabriel Nascimento MCP / MCSA / CCNA Não esqueça de contribuir para organização dos fóruns - Classifique as respostas
    segunda-feira, 5 de abril de 2010 16:59
  • Gabriel

     

    Não à necessicade de classificar por extensão, mais somente por data, pois tendo o script, pois cada tipo de arquivo ficam em pastas separadas, ai posso ter 1 para cada tipo, pois assim posso ter um controle melhor do que está sendo copiado.

    O nome poderia ser ex:

    (Pasta do Mes) Abril_2010

                          |_____(pasta com a data) Dia_01

     

    Obrigado e abraços


    Não deixe de classificar a ou as mensagens como "respondido”, caso tenha ajudado. Fazendo isso, você estará ajudando outros usuários do Fórum a identificar qual ou quais foram as soluções aplicadas na correção do problema.
    segunda-feira, 5 de abril de 2010 17:37
  • Segue script:

    On Error Resume Next
      Dim fso, folder, files, sOrigem, sDestino, s_Destino_Org, file
     
      Set fso = CreateObject("Scripting.FileSystemObject")
      sOrigem = Wscript.Arguments.Item(0)
      sDestino = Wscript.Arguments.Item(1)

      If sOrigem = "" Then
          Wscript.Echo "Passe o parametro pasta Origem"
          Wscript.Quit
      End If

      If sDestino = "" Then
          Wscript.Echo "Passe o parametro pasta Destino"
          Wscript.Quit
      End If

      Set NewFile = fso.CreateTextFile(sFolder&"\FileList.txt", True)
      Set folder = fso.GetFolder(sOrigem)
      Set files = folder.Files
     
      For each folderIdx In files
        If not fso.FolderExists(sDestino & "\" & Year(folderIdx.datecreated)) Then
            fso.CreateFolder(sDestino & "\" & Year(folderIdx.datecreated))
        End If

        If not fso.FolderExists(sDestino & "\" & Year(folderIdx.datecreated) & "\" & Month(folderIdx.datecreated)) Then
           fso.CreateFolder(sDestino & "\" & Year(folderIdx.datecreated) & "\" & Month(folderIdx.datecreated))
        End If

        If not fso.FolderExists(sDestino & "\" & Year(folderIdx.datecreated) & "\" & Month(folderIdx.datecreated) & "\" & Day(folderIdx.datecreated)) Then
           fso.CreateFolder(sDestino & "\" & Year(folderIdx.datecreated) & "\" & Month(folderIdx.datecreated) & "\" & Day(folderIdx.datecreated))
        End If
           
        sDestino_Org = sDestino & "\" & Year(folderIdx.datecreated) & "\" & Month(folderIdx.datecreated) & "\" & Day(folderIdx.datecreated) & "\"
        file = folder & "\" & folderIdx.Name
         fso.CopyFile file, SDestino_Org
         fso.DeleteFile(file)

       
      Next

    Chame o script com os parametros pasta de Origem e destino, exemplo:

    Script.vbs "C:\origem" "c:\Destino"

    Teste antes com outra pasta e qualquer duvida poste

     


    Gabriel Nascimento MCP / MCSA / CCNA Não esqueça de contribuir para organização dos fóruns - Classifique as respostas
    • Marcado como Resposta _Dener_ segunda-feira, 5 de abril de 2010 21:16
    segunda-feira, 5 de abril de 2010 19:09
  • Gabriel

    Desculpe minha ignorância, mais não manjo muito de script, podemos fazer o seguinte, vamos usar as pastas c:\origem e c:\destino pois não sei aonde alterar no Script.

    Obrigado pela compreenção e abraços


    Não deixe de classificar a ou as mensagens como "respondido”, caso tenha ajudado. Fazendo isso, você estará ajudando outros usuários do Fórum a identificar qual ou quais foram as soluções aplicadas na correção do problema.
    segunda-feira, 5 de abril de 2010 19:39
  • Dener,

    A pasta não está fixa no script, é um parametro. Salve o script como MoveFiles.vbs por exemplo e na hora de executar no cmd por exemplo, digite:

    MoveFiles "C:\Origem" "C:\Destino", vc pode alterar isso na hora de chamar o script que não vai afetar em nada.

    Exemplo de funcionamento:

    Esse script pega os arquivos na pasta de origem e grava na pasta destino que vc informou, criando a estrutura de pastas Ano -> Mes -> Dia.

    Qualquer duvida poste.


    Gabriel Nascimento MCP / MCSA / CCNA Não esqueça de contribuir para organização dos fóruns - Classifique as respostas
    segunda-feira, 5 de abril de 2010 19:49
  • Desculpe,

    MoveFiles.vbs "C:\Origem" "C:\Destino"

    ou

    cscript MoveFiles.vbs "C:\Origem" "C:\Destino"


    Gabriel Nascimento MCP / MCSA / CCNA Não esqueça de contribuir para organização dos fóruns - Classifique as respostas
    segunda-feira, 5 de abril de 2010 19:49
  • Gabriel

    Legal, copiou, fiz um teste com arquivos do dia 1 e 5 de abril, só que copiou todos para a mesma pasta.

    A estrutura ficou.

    2010

       4

          5

     

    Ficou legal, só não separou por data de criação.

     

    Obrigado desde já e abraços


    Não deixe de classificar a ou as mensagens como "respondido”, caso tenha ajudado. Fazendo isso, você estará ajudando outros usuários do Fórum a identificar qual ou quais foram as soluções aplicadas na correção do problema.
    segunda-feira, 5 de abril de 2010 19:57
  • Então é que quando vc copia o arquivo para outra pasta a data de criação dele muda, porque na verdade foi criado um novo arquivo, mas ta separando pela data de criação sim.
    Gabriel Nascimento MCP / MCSA / CCNA Não esqueça de contribuir para organização dos fóruns - Classifique as respostas
    segunda-feira, 5 de abril de 2010 20:02
  • Se quiser alterar para fazer pela data de modificação basta alterar datecreated por DateLastModified.

    Se for util vote e feche o thread.

    Qualquer coisa só postar.

    Abraços


    Gabriel Nascimento MCP / MCSA / CCNA Não esqueça de contribuir para organização dos fóruns - Classifique as respostas
    • Marcado como Resposta _Dener_ segunda-feira, 5 de abril de 2010 21:15
    segunda-feira, 5 de abril de 2010 20:06
  • Gabriel

    Muito obrigado amigo, troquei e deu tudo certo.

    Abraços e sucesso amigo.


    Não deixe de classificar a ou as mensagens como "respondido”, caso tenha ajudado. Fazendo isso, você estará ajudando outros usuários do Fórum a identificar qual ou quais foram as soluções aplicadas na correção do problema.
    segunda-feira, 5 de abril de 2010 21:15
  • Eu estou com duvida na execução do script, nao entendi onde alterar os dados! podem me ajudar?

    Administrador de Redes - MCP

    sexta-feira, 6 de março de 2015 14:57