none
Copiar, recortar e deletar arquivos

    Question

  • Bom dia pessoal,

    Acontece que eu preciso de um script que copie somente arquivos com extensões tif e jpg e após os arquivos serem copiados os mesmos da origem sejam removidos para outra pasta ou copiados e depois deletados e ao final do dia esta pasta seja removida para a pasta arquivos.

    Estou tentando adaptar o script abaixo, mas sem sucesso.

    <CODE>

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set WshShell = CreateObject("Wscript.Shell")
    dNow =Now
    yyyy = Right(Year(dNow), 4)
    mt = Right("00" &Month(dNow), 2)
    dd = Right("00" &Day(dNow), 2)
    NewFolder = "C:\Dados\Controle Célula Fiscal - 2010\07_Julho\" & dd & "." &mt & "." &yyyy & "\"
    objFSO.CreateFolder NewFolder

    '====================================================================

    Set objNetwork = CreateObject("Wscript.Network")
    strUserName = objNetwork.Username
    Set WshShell = CreateObject("Wscript.Shell")
    dNow =Now
    yyyy = Right(Year(dNow), 4)
    mt = Right("00" &Month(dNow), 2)
    dd = Right("00" &Day(dNow), 2)

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set objFSO = CreateObject("Scripting.FileSystemObject")

    'Coloque aqui a pasta que será verificada (deixe a barra no final)
    strPasta = "C:\Documents and Settings\c0165134\Desktop\2010\" & dd & "." &mt & "." &yyyy & "\"

    'Coloque aqui a pasta para a qual os arquivos serão copiados (Deixe a barra no final)
    strDest = "C:\Dados\Controle Célula Fiscal - 2010\07_Julho\" & dd & "." &mt & "." &yyyy & "\"


    ' NOME DO ARQUIVO DE LOG
    strLogFile = "C:\Dados\Logs\Histórico_de_imagens_arquivadas.txt"


    arrTipos = split(arrTipos,";")
    Set objLogFile = objFSO.OpenTextFile(strLogFile, 8, True, 0)
    objLogFile.WriteLine  VBCRLF
    objLogFile.WriteLine "===================================================================="
    objLogFile.WriteLine "PASTAS/ARQUIVOS REMOVIDOS EM: " & now
    objLogFile.WriteLine "===================================================================="

    ChecaArquivo strPasta
    GeraLog(strPasta)
    wscript.echo "ARQUIVOS COPIADOS"
    wscript.quit

     


    Sub ChecaArquivo(strSubPasta)

    Set Folder = ObjFSO.GetFolder(strSubPasta)

    For each subFolder in Folder.SubFolders
       GeraLog SubFolder.Path
       ChecaArquivo SubFolder.path
      Next

    End sub

     

    '====================================================================

    Sub GeraLog(strCaminho)

    Set objArq = ObjFSO.GetFolder(strCaminho)
    Set MyFiles = objArq.files 

    For Each MyFiles in objArq.Files
       strFileOrig = Myfiles.path
       strFileDest = strDest & MID(MyFiles.path,Len(strPasta),Len(Myfiles.path))

       if (objFSO.FileExists(strFileDest) = True) Then
          Set objFileDest = objFSO.GetFile(strFileDest)
          If DateDiff("d",objFileDest.DateLastModified,myfiles.DateLastModified) > 0 Then

             objFSO.Copyfile strFileOrig,strFileDest,True
             objLogFile.WriteLine "ARQUIVO SUBSTITUIDO : "  & myfiles.name &  " copiado em : " & Now
          End if
       Else
          pastapai = MID(RIGHT(myFiles.ParentFolder,LEN(myFiles.ParentFolder)),Len(strPasta),Len(myFiles.ParentFolder))
          dirDest = strDest
          arrTipos = split(pastapai,"\")
          For x = 0 to UBOUND(arrTipos)
             if objFSO.folderexists(dirDest & arrTipos(x)) = false Then
               objFSO.CreateFolder(dirDest & arrTipos(x))
               dirDest = dirDest & arrTipos(x)
             Else
               dirDest = dirDest & arrTipos(x)
             End if
          Next

          objFSO.Copyfile strFileOrig,strFileDest,True
          objLogFile.WriteLine "PASTA REMOVIDA PARA - "  & dirDest & myfiles.name &  " copiado em : " & Now
       End if
    Next
    End sub

    <CODE>

    Tuesday, July 13, 2010 3:44 PM

All replies

  • Amigo,

            Faça um teste com  script em bat abaixo. Após criar o script agendade para ser executado no horário desejado.

    rem Copiando arquivo...
    xcopy /C C:\*.tif&&xcopy /C c:\*.jpg d:\
    rem Movendo arquivos...
    move C:\*.tif&&move c:\*.jpg d:\

     

    Espero ter ajudado.


    Leonardo Sousa

    MCP-MCDST-MCSA-MCSE-MCTS-MCITP
    Analista de TI
    Wednesday, July 14, 2010 1:21 PM
  • Leo não conseguir usar o que você me passou, mas aqui mesmo no forúm achei um script que cópia o arquivo por extensão e após copiado deleta.

    Este tem a funcionalidade que eu preciso.

    Fiz algumas adaptações, e não é que o danado funciona + ele só funciona uma vez por dia.

    Meu objetivo com este script é o seguinte:

    No meu trabalho tenho o diretório local C:\Dados\+_NF_cadastro\ onde é salvo imagens de NFs que serão enviadas para  o diretório L:\Controle_Portarias\+_Cadastro\+_FILA\ (o driver L:\ é um mapeamento do servidor para onde irei copiar as imagens ou seja o destino) do servidor da empresa em outra localidade e C:\Dados\+_NF_cadastro\" & dd & "." &mt & "." &yyyy & "\ é a pasta do dia para onde deve tbm ser copiada as imgs para isso adicionei a linha objFSO.Copyfile strPasta & myfiles.name,strDest1,True.

    Então preciso copiar da pasta C:\Dados\+_NF_cadastro\ somente os arquivos com extensões tif e jpg para a pasta  L:\Controle_Portarias\+_Cadastro\+_FILA\ e C:\Dados\+_NF_cadastro\" & dd & "." &mt & "." &yyyy & "\ logo após deleta-los.

    Este é o script original

    strComputer = "."

    'Coloque aqui a pasta que será verificada
    strPasta = "C:\Dados\+_NF_cadastro\"

    'Coloque aqui a pasta para a qual os arquivos serão copiados (Se quiser copiar, se nao quiser apague essa linha)
    strDest = "L:\Controle_Portarias\+_Cadastro\+_FILA\"


    'Coloque aqui os tipos de arquivos que serão copiados ou deletados, separados por ";"
    arrTipos = "jpg;tif"

    ' NOME DO ARQUIVO DE LOG
    strLogFile = "C:\Dados\+_NF_cadastro\+_Logs\Cadastro_Fiscal X Físico.txt"

     

    arrTipos = split(arrTipos,";")
    Set objLogFile = objFSO.OpenTextFile(strLogFile, 8, True, 0)
    objLogFile.WriteLine  VBCRLF
    objLogFile.WriteLine "========================================================"
    objLogFile.WriteLine "ARQUIVOS ENVIADOS PARA CADASTRO EM: " & now
    objLogFile.WriteLine "========================================================"

    If (objFSO.FolderExists(strPasta) = True) Then
       Set Folder = ObjFSO.GetFolder(strPasta)
       Set MyFiles = Folder.files 
          For Each tipo in arrTipos
             For Each MyFiles in Folder.Files
                If Right(myfiles.name,3) = tipo And DateDiff("d",myfiles.DateLastModified,now) > strData Then
                   objFSO.Copyfile strPasta & myfiles.name,strDest,True
                   objLogFile.WriteLine "ARQUIVO ENVIADO PARA - "  & strDest & myfiles.name &  " copiado em : " & Now
                   objFSO.Deletefile strPasta & myfiles.name            
                End If
             Next
          Next
    End if
    wscript.quit

    --------------------------------------------------------------------------------------------

    Já este é o script com as adaptações que fiz, o mesmo só cópia uma vez por dia, se eu tentar rodar mais vezes já não cópia.

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objNetwork = CreateObject("Wscript.Network")
    strUserName = objNetwork.Username
    Set WshShell = CreateObject("Wscript.Shell")
    dNow =Now
    yyyy = Right(Year(dNow), 4)
    mt = Right("00" &Month(dNow), 2)
    dd = Right("00" &Day(dNow), 2)

    'Coloque aqui a pasta que será verificada
    strPasta = "C:\Dados\+_NF_cadastro\"

    'Coloque aqui a pasta para a qual os arquivos serão copiados (Se quiser copiar, se nao quiser apague essa linha)
    strDest = "L:\Controle_Portarias\+_Cadastro\+_FILA\"

    'Coloque aqui a pasta para a qual os arquivos serão copiados (Se quiser copiar, se nao quiser apague essa linha)
    strDest1 = "C:\Dados\+_NF_cadastro\" & dd & "." &mt & "." &yyyy & "\"


    'Coloque aqui os tipos de arquivos que serão copiados ou deletados, separados por ";"
    arrTipos = "jpg;tif"

    ' NOME DO ARQUIVO DE LOG
    strLogFile = "C:\Dados\+_NF_cadastro\+_Logs\Cadastro_Fiscal X Físico.txt"

     

    arrTipos = split(arrTipos,";")
    Set objLogFile = objFSO.OpenTextFile(strLogFile, 8, True, 0)
    objLogFile.WriteLine  VBCRLF
    objLogFile.WriteLine "========================================================"
    objLogFile.WriteLine "ARQUIVOS ENVIADOS PARA CADASTRO EM: " & now
    objLogFile.WriteLine "========================================================"

    If (objFSO.FolderExists(strPasta) = True) Then
       Set Folder = ObjFSO.GetFolder(strPasta)
       Set MyFiles = Folder.files 
          For Each tipo in arrTipos
             For Each MyFiles in Folder.Files
                If Right(myfiles.name,3) = tipo And DateDiff("d",myfiles.DateLastModified,now) > strData Then
                   objFSO.Copyfile strPasta & myfiles.name,strDest,True
                   objFSO.Copyfile strPasta & myfiles.name,strDest1,True
                   objLogFile.WriteLine "ARQUIVO ENVIADO PARA - "  & strDest & myfiles.name &  " copiado em : " & Now
                   objFSO.Deletefile strPasta & myfiles.name            
                End If
             Next
          Next
    End if
    wscript.echo "ARQUIVOS ENVIADOS PARA CADASTRO COM SUCESSO"
    wscript.quit

    Friday, July 16, 2010 9:37 PM