Ir para conteúdo
Fórum Script Brasil
  • 0

Deletar arquivos e pastas das pastas temporárias


serginho450

Pergunta

Olá de pessoal.

Estou criando um .exe para deletar as pastas temp, %temp%, prefetch e dllcache do winxp.

O problema é que o código que eu conheço só serve para deletar arquivos.

Gostaria também que se a pasta estiver vazia ou algum arquivo em execução ele não me retorne um erro.

Alguém aí sabe qual eu devo usar?

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

você pode usar a funcao RmDir(). ou usar o objeto fso, por acaso, aqui tem um tópico q falamos exatamente sobre excluir pastas com fso: http://scriptbrasil.com.br/forum/index.php?showtopic=162075

adicione a referencia Microsoft Scripting Runtime, declare o objeto Scripting.FileSystemObject e use o metodo .DeleteFolder(), passando o caminho da pasta como parametro.

outra opcao seria usar comandos de dos com a funcao Shell().

mas não sei se vai evitar erros caso tenha arquivo aberto, imagino q você vai ter procurar outra forma de contornar isso. não sei como o windows faz esse controle de se os arquivos estao sendo usados ou não, acho q você tera q pesquisar sobre isso.

fora isso, sera q nenhuma dessas pastas seriam pastas protegidas do sistema?? sera q o windows vai ter dar permissao pra exclui-las?? você já tentou??

Link para o comentário
Compartilhar em outros sites

  • 0
você pode usar a funcao RmDir(). ou usar o objeto fso, por acaso, aqui tem um tópico q falamos exatamente sobre excluir pastas com fso: http://scriptbrasil.com.br/forum/index.php?showtopic=162075

adicione a referencia Microsoft Scripting Runtime, declare o objeto Scripting.FileSystemObject e use o metodo .DeleteFolder(), passando o caminho da pasta como parametro.

outra opcao seria usar comandos de dos com a funcao Shell().

mas não sei se vai evitar erros caso tenha arquivo aberto, imagino q você vai ter procurar outra forma de contornar isso. não sei como o windows faz esse controle de se os arquivos estao sendo usados ou não, acho q você tera q pesquisar sobre isso.

fora isso, sera q nenhuma dessas pastas seriam pastas protegidas do sistema?? sera q o windows vai ter dar permissao pra exclui-las?? você já tentou??

Desculpe, eu me expresssei mal. Na verdade minha interção é criar um script que faça + ou - como o cleaner faz. Deletar arquivos e pastas temporárias, ou seja todas as pastas e arquivos que estiverem dentro das pastas temporárias. A pasta %temp% mesmo costuma ficar lotada de pastas e arquivos inúteis. Minha intenção é só apagar o que não serve mais para o sistema.

Editado por serginho450
Link para o comentário
Compartilhar em outros sites

  • 0

Conseguí no Win7. Veja como ficou o código. No final ele ainda abre a limpeza de disco e o desfragmentador.

Só que no Winxp não funciona. Além de ele não limpar as pastas (claro que eu adaptei a localização das pastas para o Winxp), no final emite um erro: Run time error '5': Invalid Procedure call or argument Na última linha "Shell Environ("windir") & ("\system32\dfrg.msc"), vbNormalFocus"

Veja o código no WinXP

Private Type SHFILEOPSTRUCT
    hWnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAborted As Boolean
    hNameMaps As Long
    sProgress As String
End Type

Private Const FO_DELETE = &H3

Private Const FOF_ALLOWUNDO = &H40  ' Move to recycle bin
Private Const FOF_SILENT As Long = &H4
Private Const FOF_SIMPLEPROGRESS As Long = &H100
Private Const FOF_NOCONFIRMATION As Long = &H10

Private Declare Function SHFileOperation Lib "shell32.dll" _
        Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) _
        As Long


Private Sub Command1_Click()
    Dim SHFileOp As SHFILEOPSTRUCT, loc As String

If Text1.Text = "" Then
    MsgBox "Operação Canselada. Insira o nome do usuário."
    Text1.SetFocus
    Else
    With SHFileOp
        ' Function:  Delete
        .wFunc = FO_DELETE
        ' Which file/dir
        .pFrom = "C:\Users\" & Text1.Text & "\Configurações Locais\Temp"

        ' Set flags
        .fFlags = FOF_SILENT Or _
                  FOF_SIMPLEPROGRESS Or _
                  FOF_NOCONFIRMATION
    End With
    ' Kiss it goodbye
    SHFileOperation SHFileOp

    With SHFileOp
        ' Function:  Delete
        .wFunc = FO_DELETE
        ' Which file/dir
        .pFrom = "C:\Windows\Temp"

        ' Set flags
        .fFlags = FOF_SILENT Or _
                  FOF_SIMPLEPROGRESS Or _
                  FOF_NOCONFIRMATION
    End With
    ' Kiss it goodbye
    loc = Dir(Environ("windir") & ("\Prefetch\*.*"))
    If loc = "" Then
 MsgBox "A pasta Prefetch já está vazia"
 Else
Kill Environ("windir") & ("\Prefetch\*.*")
loc = ""
End If
    loc = Dir(Environ("windir") & ("\system32\dllcache"))
 If loc = "" Then
 MsgBox "A pasta dllcache já está vazia"
 Else
Kill Environ("windir") & ("\system32\dllcache\*.*")
loc = ""
End If


End If
Shell Environ("windir") & ("\system32\cleanmgr.exe"), vbNormalFocus
Shell Environ("windir") & ("\system32\dfrg.msc"), vbNormalFocus
End Sub
Veja o Código no Win7 (este funciona perfeito):
Private Type SHFILEOPSTRUCT
    hWnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAborted As Boolean
    hNameMaps As Long
    sProgress As String
End Type

Private Const FO_DELETE = &H3

Private Const FOF_ALLOWUNDO = &H40  ' Move to recycle bin
Private Const FOF_SILENT As Long = &H4
Private Const FOF_SIMPLEPROGRESS As Long = &H100
Private Const FOF_NOCONFIRMATION As Long = &H10

Private Declare Function SHFileOperation Lib "shell32.dll" _
        Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) _
        As Long


Private Sub Command1_Click()
    Dim SHFileOp As SHFILEOPSTRUCT, loc As String

If Text1.Text = "" Then
    MsgBox "Operação Canselada. Insira o nome do usuário."
    Text1.SetFocus
    Else
    With SHFileOp
        ' Function:  Delete
        .wFunc = FO_DELETE
        ' Which file/dir
        .pFrom = "C:\Users\" & Text1.Text & "\AppData\Local\Temp"

        ' Set flags
        .fFlags = FOF_SILENT Or _
                  FOF_SIMPLEPROGRESS Or _
                  FOF_NOCONFIRMATION
    End With
    ' Kiss it goodbye
    SHFileOperation SHFileOp

    With SHFileOp
        ' Function:  Delete
        .wFunc = FO_DELETE
        ' Which file/dir
        .pFrom = "C:\Windows\Temp"

        ' Set flags
        .fFlags = FOF_SILENT Or _
                  FOF_SIMPLEPROGRESS Or _
                  FOF_NOCONFIRMATION
    End With
    ' Kiss it goodbye Environ("windir") & ("\system32\cleanmgr.exe")
    loc = Dir(Environ("windir") & ("\Prefetch\*.*"))
 If loc = "" Then
 MsgBox "A pasta Prefetch já está vazia"
 Else
Kill Environ("windir") & ("\Prefetch\*.*")
loc = ""

End If


End If
Shell Environ("windir") & ("\system32\cleanmgr.exe"), vbNormalFocus
Shell Environ("windir") & ("\system32\dfrgui.exe"), vbNormalFocus
End Sub

O que eu faço?

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

  • 0
hum... tente trocar "windir" por "systemroot" no xp e veja se não funciona.

Beleza, agora as pastas Prefetch e dllcache foram apagadas, só que %temp% e temp continuam cheias. Será que não tem algum erro nestes primeiros códigos. O erro Run time error '5': Invalid Procedure call or argument Na última linha "Shell Environ("windir") & ("\system32\dfrg.msc"), vbNormalFocus" na última linha ainda continua. Me dá uma força aí!!!! Valeu.

Link para o comentário
Compartilhar em outros sites

  • 0
hum... tente trocar "windir" por "systemroot" no xp e veja se não funciona.

Beleza, agora as pastas Prefetch e dllcache foram apagadas, só que %temp% e temp continuam cheias. Será que não tem algum erro nestes primeiros códigos. O erro Run time error '5': Invalid Procedure call or argument Na última linha "Shell Environ("windir") & ("\system32\dfrg.msc"), vbNormalFocus" na última linha ainda continua. Me dá uma força aí!!!! Valeu.

sim, acho q o xp nem sempre reconhece a variavel "windir" (apesar q aqui ta reconhecendo), troque por "systemroot" ai tb.

quanto as pastas temp, veja q você ta colocando o caminho direto. no windows xp, o caminho tb é "C:\Users\"?? acho q seria em "C:\Documents and Settings\" não??

ou use a variavel "TEMP", q deve funcionar.

se não der certo, então cheque o retorno da SHFileOperation(). ele vai retornar um numero de acordo com o erro q tiver acontecido. depois verifique nessa tabela pra saber qual o problema: http://msdn.microsoft.com/en-us/library/bb...v=vs.85%29.aspx (o codigo esta em hexadecimal na tabela).

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...