Inquiridor
Copiar, recortar e deletar arquivos

Pergunta
-
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
NextEnd sub
'====================================================================
Sub GeraLog(strCaminho)
Set objArq = ObjFSO.GetFolder(strCaminho)
Set MyFiles = objArq.filesFor 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 ThenobjFSO.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
NextobjFSO.Copyfile strFileOrig,strFileDest,True
objLogFile.WriteLine "PASTA REMOVIDA PARA - " & dirDest & myfiles.name & " copiado em : " & Now
End if
Next
End sub<CODE>
Todas as Respostas
-
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
-
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