serginho450 Postado Julho 11, 2011 Denunciar Share Postado Julho 11, 2011 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Julho 13, 2011 Denunciar Share Postado Julho 13, 2011 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=162075adicione 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?? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 serginho450 Postado Julho 14, 2011 Autor Denunciar Share Postado Julho 14, 2011 (editado) 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=162075adicione 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 Julho 14, 2011 por serginho450 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 serginho450 Postado Julho 14, 2011 Autor Denunciar Share Postado Julho 14, 2011 (editado) 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 WinXPPrivate 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 SubO que eu faço? Editado Julho 15, 2011 por kuroi Adicionar tag CODE Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Julho 15, 2011 Denunciar Share Postado Julho 15, 2011 hum... tente trocar "windir" por "systemroot" no xp e veja se não funciona. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 serginho450 Postado Julho 15, 2011 Autor Denunciar Share Postado Julho 15, 2011 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Julho 15, 2011 Denunciar Share Postado Julho 15, 2011 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). Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
serginho450
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
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.