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.
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
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
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
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)
#>
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