none
Script para excluir subdiretórios vazios RRS feed

  • Pergunta

  • Boa tarde.

    Estou tentando criar um script para remoção de subdiretórios vazios. 

    Tenho o seguinte caso:

    uma pasta Z:\Publico\Diretório1

    Z:\Publico\Diretório2

    Z:\Publico\Diretório3

    Z:\Publico\Diretório4

    Gostaria de apagar todos os subdiretórios que se encontram após os Diretório1 Diretório2 etc.

    Criei um script para remover os arquivos

    FORFILES /P Z:\Publico\  /S /M *.* /D -3 /C "cmd /c del /F /Q @file"  

    Mas se houver subpastas elas não são removidas.

    Algum conseguiria me ajudar?

    Obrigado.

     

    segunda-feira, 13 de janeiro de 2020 18:13

Respostas

  • Consegui da seguinte forma 
    for /f "delims=" %%d in ('dir  /s /b /ad C:\Temp4\ ^| sort /r') do (
    cd %%d
    
    FOR /F "delims=" %%i IN ('"DIR /AD /B "%%d" | SORT /R"') DO rmdir /q /s "%%i"
    
    pause
    )
    Obrigado pela ajuda de todos
    terça-feira, 14 de janeiro de 2020 18:25

Todas as Respostas

  • Olá.

    Num ambiente de teste, tente algo mais ou menos assim:

    cd /D C:\teste\
    pause
    for /f "delims=" %%d in ('dir /s /b /ad ^| sort /r') do rd "%%d"
    pause

    Ou simplesmente:

    ROBOCOPY folder1 folder1 /S /MOVE

    Fonte: https://superuser.com/questions/39674/recursively-delete-empty-directories-in-windows


    https://inframicrosoft.wordpress.com/


    • Editado J. Maurício terça-feira, 14 de janeiro de 2020 10:46
    terça-feira, 14 de janeiro de 2020 10:43
  • Olá Gustavo, 

    Você pode tentar com Powershell. Seria algo assim:

    Get-ChildItem Z:\Publico | ForEach-Object {
            if (Get-ChildItem $_.Name){
                Write-Output "$($_.Name) Possui Conteúdo. Não remover."
            }else{
                Write-Output "$($_.Name) está vazia. Removendo."
                Remove-Item $_.Name -Force
            }
        }

    terça-feira, 14 de janeiro de 2020 12:59
  • J. Maurício,

    Bom dia, obrigado pelo auxílio.

    Este script apaga as pastas Diretório1 Diretório2 Diretório3 ... e no caso necessitamos que só sejam removidos as pastas que se encontram dentro destes diretório.

    Saberia alguma outra solução? desde já agradeço!

    terça-feira, 14 de janeiro de 2020 13:18
  • J. Maurício,

    Bom dia, obrigado pelo auxílio.

    Este script apaga as pastas Diretório1 Diretório2 Diretório3 ... e no caso necessitamos que só sejam removidos as pastas que se encontram dentro destes diretório.

    Saberia alguma outra solução? desde já agradeço!

    Você pode fazer um loop para cada diretório. Mais ou menos assim:

    set list="C:\teste\Nova pasta (1)" "C:\teste\Nova pasta (2)" "C:\teste\Nova pasta (3)"
    
    for %%A in (%list%) do (
    	cd /D %%A
    	for /f "delims=" %%d in ('dir /s /b /ad ^| sort /r') do rd "%%d"
    	pause
    )
    
    pause
    Obs.: Os "pauses" são apenas pra se permitir ter uma ideia do que está acontecendo. 


    https://inframicrosoft.wordpress.com/


    • Editado J. Maurício terça-feira, 14 de janeiro de 2020 15:30
    terça-feira, 14 de janeiro de 2020 15:26
  • Maurício,

    Veja o que estou tentando fazer

    set list='DIR /AD/B/S C:\Temp4 | SORT /R'
    echo %list%
    Pause
    
    
    for %%A in (%list%) do (
    	cd /D %%A
    	for /f "delims=" %%d in ('dir /s /b /ad C:\Temp4\ ^| sort /r') do rd "%%d"
    	Pause
    )

    Como são muitas pastas estou tentando utilizar o comando 

    DIR /AD/B/S C:\Temp4 | SORT /R

    Para listar os diretórios que no caso são os que não desejo remover.

    Só que não sei fazer um array com este comando.

    terça-feira, 14 de janeiro de 2020 16:37
  • Consegui da seguinte forma 
    for /f "delims=" %%d in ('dir  /s /b /ad C:\Temp4\ ^| sort /r') do (
    cd %%d
    
    FOR /F "delims=" %%i IN ('"DIR /AD /B "%%d" | SORT /R"') DO rmdir /q /s "%%i"
    
    pause
    )
    Obrigado pela ajuda de todos
    terça-feira, 14 de janeiro de 2020 18:25