Usuário com melhor resposta
Script para excluir subdiretórios vazios

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.
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- Marcado como Resposta Gustavo Cavalcante terça-feira, 14 de janeiro de 2020 18:53
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
-
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 } }
-
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!
-
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
-
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.
-
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- Marcado como Resposta Gustavo Cavalcante terça-feira, 14 de janeiro de 2020 18:53