Script: Ältesten Ordner löschen, wenn Festplattenlimit erreicht

donurlaub

Newbie
Registriert
Mai 2018
Beiträge
1
Hallo,


ich benötige Eure Hilfe:
Auf einer externen FP liegen Datensicherungsordner im Format "Backup_2017-12", "Backup_2018-01", "Backup_2018-02" u.s.w.
Mein Batch-Script führt die WindowsServerSicherung aus und legt diese Ordner auf der externen FP an.
Nun soll das Script zusätzlich vorab prüfen, ob noch mind. z.B. 1500mb auf der FP frei sind.
Ist dies nicht der Fall, soll das Script vorab den ältesten Backup-Ordner löschen.

Hier im Forum habe ich bereits das folgende Script gefunden:

Code:
    set Pf_ZielBackup=H:\test
     
     
    echo off
    Setlocal EnableDelayedExpansion
    set "_count=0"
    set "foldersToKeep=40"
     
    rem count the files
    for /f "tokens=*" %%a in ('dir %Pf_ZielBackup% /a:d /b /o:d') do @(set /a _count+=1 >nul)
     
    echo !_count! directories found
     
    rem keep x folders, delete the rest
    rem with x as the variable "foldersToKeep"
    for /f "skip=%foldersToKeep%" %%b in ('dir %Pf_ZielBackup% /a:d /b /o:-d') do (
        echo directory !_count! is %Pf_ZielBackup%\%%b
        set /a _count-=1
        rd /s /q %Pf_ZielBackup%\%%b
    )
     
    pause

Damit klappt das Löschen des ältesten Ordners schonmal sehr gut.
Allerdings soll ja nicht die Anzahl der Ordner gezählt werden,
sondern das FP-Limit geprüft werden.

Könnt Ihr mir helfen? Ich komme leider mit meinen (kaum vorhandenen) Programmier-Kenntnissen nicht weiter:rolleyes:
Danke und Gruß
don
 
Naja, batch ist doof. Ich kann dir eine Programmstruktur geben, aber wie man die in batch umsetzt must du dann selbst ergoogeln.
Code:
Solange $freier_Speicher auf $laufwerk < 1500mb
{
Suche ältesten Ordner
lösche ältesten ordner
}

Jetzt müsstest du dinge googeln wie "batch freien speicherplatz laufwerk ermitteln"
 
Zuletzt bearbeitet:
Mithilfe der PowerShell bekommt man den freien Speicherplatz so heraus:

PowerShell:
$disk = Get-WmiObject Win32_LogicalDisk | Where-Object VolumeName -eq "NameDerFestplatte"

$disk.FreeSpace
 
Zum einen Zeigt der DIR-Befehl den freien Speicherplatz an, man kann aber auch wmic für die Abfrage des verfügbaren Speicherplatz nutzen:
Code:
wmic logicaldisk where "DeviceID='Z:'" get FreeSpace /value
Das Ergebnis ist allerdings in Bytes, für MB müsste man die letzten 6 Stellen wegstreichen.
 
In der Suche Windows Powershell ISE eingeben und das Ergebnis dann"Als Administrator ausführen"
Dann Folgendes in das Fenster kopieren:

Code:
$LwDrNM = @{Name="Laufwerk";Expression={($_.Name).Split(':\')[0]}}
$LwDrVL = @{Name="Bezeichnung";Expression={$_.VolumeLabel}}
$LwDrDF = @{Name="Format";Expression={$_.DriveFormat}}
$LwDrTY = @{Name="Typ";Expression={$_.DriveType}}
$LwDrKP = @{Name="Kapazität";Expression={"{0:N0} MB" -F(($_.TotalSize/1MB))}}
$LwDrAV = @{Name="Verfügbar";Expression={"{0:N0} MB" -F(($_.TotalFreeSpace/1MB))}}
$LwDrIU = @{Name="Belegt";Expression={"{0:P2}" `
-F(($_.TotalSize-$_.TotalFreeSpace)/($_.TotalSize))}}
$LwDrTF = @{Name="Frei";Expression={"{0:P2}" -F(($_.TotalFreeSpace)/($_.TotalSize))}}

$MyDrives = [System.IO.DriveInfo]::GetDrives() | Where {$_.IsReady -Eq "True"} | `
Select-Object $LwDrNM,$LwDrVL,$LwDrDF,$LwDrTY,$LwDrKP,$LwDrAV,$LwDrIU,$LwDrTF | Out-String
$MyDrives = $MyDrives -Replace "\s+$","" -Replace "^\s+",""
cls
$MyDrives
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben