Como encontrar todos os diretórios vazios usando lote

2

Como você encontra todos os diretórios vazios usando scripts em lote?

Eu tenho uma pasta chamada "shows" na minha área de trabalho. Dentro dele tem muitos subdiretórios. Alguns diretórios estão vazios e outros possuem alguns arquivos.

Como posso fazer um loop por toda a subpasta e imprimir todas as pastas vazias?

Abaixo está o que eu tentei. O problema é que ele imprime todas as pastas ... mesmo que uma subpasta não esteja vazia.

@echo off

SET "MYPATH=C:\Users\dave\Desktop\shows"

 for /d %%a in ("%mypath%\*") do (
    dir /b /s "%MYPATH%"
    pause
)
pause
    
por dave 16.11.2016 / 02:00

2 respostas

2

Você pode usar o PowerShell! Este one-liner fará o truque:

Get-ChildItem 'C:\Users\dave\Desktop\shows' -Recurse -Directory | Where-Object {[System.IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | ForEach-Object {$_.FullName}

A primeira parte (começando com Get-ChildItem ) encontra todos os subdiretórios daquela pasta. A segunda parte ( Where-Object ) filtra esses resultados para aqueles que não possuem entradas de sistema de arquivos de qualquer tipo, nem arquivos nem pastas. Finalmente, a parte ForEach-Object apresenta o nome completo da pasta encontrada.

Podemos condensar essa linha um pouco usando aliases e abreviações:

gci -Dir -r | ? {[IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | % {$_.FullName}

Por fim, você pode chamá-lo por lote:

powershell -command "gci -Dir -r | ? {[IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | % {$_.FullName}"
    
por 16.11.2016 / 02:22
2

Aqui está um jeito.

Na linha de comando:

for /r "C:\Users\dave\Desktop\shows" /d %F in (.) do @dir /b "%F" | findstr "^" >nul || echo %~fF

Usando um script em lotes:

@echo off
setlocal
set "myPath=C:\Users\dave\Desktop\shows"
for /r "%myPath%" /d %%F in (.) do dir /b "%%F" | findstr "^" >nul || echo %%~fF
    
por 16.11.2016 / 05:01

Tags