serginho450 Posted July 11, 2011 Report Share Posted July 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? Quote Link to comment Share on other sites More sharing options...
0 kuroi Posted July 13, 2011 Report Share Posted July 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?? Quote Link to comment Share on other sites More sharing options...
0 serginho450 Posted July 14, 2011 Author Report Share Posted July 14, 2011 (edited) 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. Edited July 14, 2011 by serginho450 Quote Link to comment Share on other sites More sharing options...
0 serginho450 Posted July 14, 2011 Author Report Share Posted July 14, 2011 (edited) 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? Edited July 15, 2011 by kuroi Adicionar tag CODE Quote Link to comment Share on other sites More sharing options...
0 kuroi Posted July 15, 2011 Report Share Posted July 15, 2011 hum... tente trocar "windir" por "systemroot" no xp e veja se não funciona. Quote Link to comment Share on other sites More sharing options...
0 serginho450 Posted July 15, 2011 Author Report Share Posted July 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. Quote Link to comment Share on other sites More sharing options...
0 kuroi Posted July 15, 2011 Report Share Posted July 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). Quote Link to comment Share on other sites More sharing options...
Question
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 to comment
Share on other sites
6 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.