none
Apagar pastas vazias RRS feed

  • Pergunta

  • Gostaria que alguem me auxliasse em desenvolver um script que busque todas as pastas e subpastas vazias de uma determinada partição e seguida as apagasse.
    sábado, 2 de maio de 2009 10:40

Todas as Respostas

  • Olá,

    Faça um teste no script abaixo. Veja se te atende:

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    set FSo = CreateObject("Scripting.FileSystemObject")

    'Coloque aqui a pasta que será verificada

    Pasta = "C:\teste"

    'Coloque aqui a pasta para a qual os arquivos serão copiados
    strDest = "C:\log.txt"

    set folder = FSO.getFolder (Pasta)

    if folder.Subfolders.count > 0 then
      for each SubFolder in folder.Subfolders
       BuscaArquivo SubFolder
      next
    end if


    Sub BuscaArquivo(strPasta)

    if strPasta.Files.Count = 0 Then
       strPasta.Delete
    End if

    End Sub


    Faça os testes e nos retorne.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    segunda-feira, 4 de maio de 2009 12:12
  • Funcionou perfeito, mas tem como procurar por todas pastas vazias de deleta-las?
    terça-feira, 4 de agosto de 2009 13:40
  • Olá,

    Como assim, todas??? Se você alterar a variavel Pasta = "C:\teste" para Pasta = "C:\"  Acredito que atende.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique



    terça-feira, 4 de agosto de 2009 14:14
  • Fiz isso mas deu " permissão negada".
    • Marcado como Resposta lcnferreira terça-feira, 4 de agosto de 2009 14:17
    • Não Marcado como Resposta Jesiel S. Pereira terça-feira, 4 de agosto de 2009 15:24
    terça-feira, 4 de agosto de 2009 14:16
  • Olá,

    Verifique o script abaixo:

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    set FSo = CreateObject("Scripting.FileSystemObject")

    Set colFolders = objWMIService.ExecQuery("Select * from Win32_Directory")

    For Each objFolder in colFolders

    set folder = FSO.getFolder (objFolder.name)


    if folder.Subfolders.count > 0 then
      for each SubFolder in folder.Subfolders
       BuscaArquivo SubFolder
      next
    end if

    Next


    Sub BuscaArquivo(strPasta)

    set strpasta = FSO.GetFolder(strPasta)

    if strPasta.SubFolders.Count = 0 And strPasta.Files.Count = 0 Then
       wscript.echo strPasta.path
    '   strPasta.Delete
    End if

    End Sub



    Se for oque você precisa, remova o wscript.echo strPasta.path e tire o comentário (caracter ' ) no inicio da linha strPasta.delete



    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    terça-feira, 4 de agosto de 2009 15:24
  • o script localiza todas as pastas vazias, mas na hora de apagar da acesso negado...
    terça-feira, 4 de agosto de 2009 15:39
  • Olá,

    Execute o script abaixo (Utilize uma conta de administrador local):


    On error resume next
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    set FSo = CreateObject("Scripting.FileSystemObject")

    Set colFolders = objWMIService.ExecQuery("Select * from Win32_Directory")

    For Each objFolder in colFolders

    set folder = FSO.getFolder (objFolder.name)


    if folder.Subfolders.count > 0 then
      for each SubFolder in folder.Subfolders
       BuscaArquivo SubFolder
      next
    end if

    Next


    Sub BuscaArquivo(strPasta)

    set strpasta = FSO.GetFolder(strPasta)

    if strPasta.SubFolders.Count = 0 And strPasta.Files.Count = 0 Then
       wscript.echo strPasta.path
       strPasta.Delete
    End if

    End Sub



    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    terça-feira, 4 de agosto de 2009 20:46
  • Totalmente funcional!!! Agora vou verificar como fazer para salvar em um arquivo texto o nome das pastas deletadas.
    quarta-feira, 5 de agosto de 2009 14:20
  • Olá,

    Segue o script com o log:

    On error resume next

    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
    Set OutPutFile = FileSystem.CreateTextFile("Pastas Apagadas.txt", True)

    OutPutFile.WriteLine "PASTAS APAGADAS EM: " & now

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    set FSo = CreateObject("Scripting.FileSystemObject")

    Set colFolders = objWMIService.ExecQuery("Select * from Win32_Directory")

    For Each objFolder in colFolders

    set folder = FSO.getFolder (objFolder.name)


    if folder.Subfolders.count > 0 then
      for each SubFolder in folder.Subfolders
       BuscaArquivo SubFolder
      next
    end if

    Next

    OutPutFile.Close
    wscript.quit


    Sub BuscaArquivo(strPasta)

    set strpasta = FSO.GetFolder(strPasta)

    if strPasta.SubFolders.Count = 0 And strPasta.Files.Count = 0 Then
       OutPutFile.WriteLine strPasta.path
       strPasta.Delete
    End if

    End Sub



    Até mais,

    Jesiel

    Obs.: Se útil, classifique

    quarta-feira, 5 de agosto de 2009 15:31