So finden Sie leere Verzeichnisse in Windows mit einem Powershell-Skript

Welchen Befehl verwenden Sie, um leere Verzeichnisse in Windows zu finden?

Einige Ordner enthalten möglicherweise versteckte Ordner wie .svn oder .settings, sollten jedoch weiterhin als leere Ordner behandelt werden.

Author: Moab, 2011-08-10

4 answers

Der einfachste Weg, den ich mir vorstellen kann, ist mit einem kleinen PowerShell-Skript. Wenn Sie Windows 7 ausführen, sollten Sie es bereits installiert haben, wenn nicht besuchen Microsoft.com zum Herunterladen und Installieren. Der Link enthält eine detaillierte Beschreibung, aber der Jist der Operation ist hier für Sie Bequemlichkeit enthalten.

PowerShell öffnen und Folgendes eingeben:

(gci C:\Scripts -r | ? {$_.PSIsContainer -eq $True}) | ? {$_.GetFiles().Count -eq 0} | select FullName

Ändern C:\Scripts um was auch immer Sie durchsuchen möchten, können Sie es sogar auf nur C:\ wenn Sie möchten, dass es die gesamte Fahrminuten.

Es gibt Ihnen eine Ausgabe wie diese (beachten Sie, dass dies die leeren Verzeichnisse unten sind C:\Scripts.

FullName
------- 
C:\Scripts\Empty 
C:\Scripts\Empty Folder 2 
C:\Scripts\Empty\Empty Subfolder 
C:\Scripts\New Folder\Empty Subfolder Three Levels Deep

Wenn Sie sich PowerShell ein wenig ansehen, können Sie sicher herausfinden, wie Sie leere Ordner automatisch löschen können, wenn Sie möchten (obwohl ich dagegen empfehle, nur für den Fall.)

Edit: Wie Richard in den Kommentaren erwähnt hat, verwenden Sie für ein wirklich leeres Verzeichnis:

(gci C:\Scripts -r | ? {$_.PSIsContainer -eq $True}) | ?{$_.GetFileSystemInfos().Count -eq 0} | select FullName
 14
Author: Windos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-08-10 06:25:11

Das Folgende ist der einfachste Weg, dies mit einer einzigen Codezeile zu erreichen. Es listet die leeren Verzeichnisse am aktuellen Speicherort auf. Wenn eine Rekursion erforderlich ist, kann der Parameter-Recurse zum Aufruf von Get-ChildItem hinzugefügt werden.

Get-ChildItem -Directory | Where-Object { $_.GetFileSystemInfos().Count -eq 0 }

Kurzversion mit Aliasnamen:

dir -Directory | ? {$_.GetFileSystemInfos().Count -eq 0 }

Oder als parametrisierte PowerShell-Funktion (ich habe dies meinem PowerShell-Startprofil hinzugefügt):

Function Get-EmptyDirectories($basedir) { 
    Get-ChildItem -Directory $basedir | Where-Object { $_.GetFileSystemInfos().Count -eq 0 }
}

Dies kann dann als jede andere PowerShell-Funktion aufgerufen werden, einschließlich Rohrleitung. Dieser Aufruf würde beispielsweise alle leeren Verzeichnisse im Temp-Verzeichnis des Systems löschen:

Get-EmptyDirectories $env:TMP | del

 3
Author: eso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-03-12 11:00:31

Versuche dies

Get-ChildItem C:\Scripts -Recurse -Directory | Where-Object {!$_.GetFileSystemInfos().Count}

Die Anzahl ist nicht 0, sie existiert überhaupt nicht, was bedeutet, dass das Verzeichnis vollständig leer ist oder andere vollständig leere Ordner enthält

 2
Author: Tomer Salakoff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-01-23 15:01:38

Danke, ich habe dies als Grundlage für mein Skript verwendet. Ich wollte leere Ordner löschen, aber der Versuch, Where-Object {$_.GetFiles().Count -eq 0} zu tun, würde Ordner löschen, die Unterverzeichnisse hatten, die nicht leer waren. Am Ende habe ich eine DO WHILE-Schleife verwendet, um einen Ordner zu entfernen, der keine Dateien oder Ordner hatte, und dann eine Schleife zurückgeschleift und erneut überprüft, bis er das Ende des Baums erreicht hat.

$Datefn=Get-Date -format M.d.yyyy_HH.mm.ss
#Set The File Name for the log file
$DelFileName = $Datefn
#Set The File Ext for the log file
$DelFileExt = " - Old Files" + ".log"
#Set The File Name With Ext for the log file
$DelFileName = $DelFileName + $DelFileExt
#Set Log Path
$LogPath = [Environment]::GetFolderPath("Desktop")
$Path = 'Q:\'
$NumDays = 365
Get-ChildItem -Path $Path -Exclude DCID.txt,*.exe -Recurse | Where-Object {$_.lastwritetime -lt`
(Get-Date).addDays(-$NumDays) -and $_.psiscontainer -eq $false} |
    ForEach-Object  {
        $properties = @{`
            Path = $_.Directory`
            Name = $_.Name
            DateModified = $_.LastWriteTime
            Size = $_.Length / 1GB  }
    New-Object PSObject -Property $properties | select Path,Name,DateModified, Size
    } |
    Out-File "$LogPath\$DelFileName"
<#
#Removes the files found
Get-ChildItem -Path $Path -Exclude DCID.txt,*.exe -Recurse | Where-Object {$_.lastwritetime -lt`
(Get-Date).addDays(-365) -and $_.psiscontainer -eq $false} | Remove-Item -Recurse -Force
#Removes empty folders
DO {
$a = (Get-ChildItem $Path -Recurse | Where-Object {$_.PSIsContainer -eq $true}) | Where-Object`
{$_.GetFileSystemInfos().Count -eq 0} | Select-Object Fullname
$a
(Get-ChildItem $Path -Recurse | Where-Object {$_.PSIsContainer -eq $true}) | Where-Object`
{$_.GetFileSystemInfos().Count -eq 0} | Remove-Item -Force
}
WHILE ($a -ne $null)
#>
 1
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-05-09 23:28:38