Jump to content
Fórum Script Brasil
  • 0

Deletar arquivos e pastas das pastas temporárias


serginho450

Question

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 to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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.

Edited by serginho450
Link to comment
Share on other 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?

Edited by kuroi
Adicionar tag CODE
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...