Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Ältestes Verzeichnis per Batch finden

Frage Entwicklung Batch & Shell

Mitglied: Boulder

Boulder (Level 1) - Jetzt verbinden

03.03.2009, aktualisiert 13:40 Uhr, 4487 Aufrufe, 2 Kommentare

Vorweg:

Ich habe ein Script geschrieben, welches eine Backupdatei in ein Unterverzeichnis verschiebt. Jetzt prüfe ich, wie groß die verschobeneSicherung war, rechne eine Sicherheit von 50% oben drauf und vergleiche das mit dem aktuell freien Speicher auf dem Laufwerk. Wenn der restliche Speicherplatz kleiner ist als die errechnete Sicherheit, dann komme ich zu dem unten abgebildeten Teil. Hier soll später einmal die älteste Sicherung gelöscht werden.

Ich habe Verzeichnisse im Format \Backup_JJJJMMTT erstellt.

01.
:VOLL 
02.
echo Zu wenig freier Speicher, loesche aelteste Tagessicherung 
03.
set vergleich=9999999999999 
04.
 
05.
FOR /F "tokens=2 delims=_" %%i in ('dir %LW% /-c') do IF "%%i" lss "%vergleich%" ( 
06.
 
07.
echo %%i ist lss #kleiner als# %vergleich%  
08.
 
09.
set vergleich=%%i  
10.
 
11.
echo Habe Vergleich auf %vergleich% gesetzt #Sollte %%i sein#) 
12.
 
13.
echo Ich wuerde %vergleich% loeschen. 
14.
 
15.
pause 
16.
 
17.
GOTO :SPACE
Mein Problem ist jetzt, das er das set vergleich=%%i nur am ende des FOR wirklich ausführt.
Die Ausgabe des Script ist folgende:

Zu wenig freier Speicher, loesche aelteste Tagessicherung
20090303 ist lss #kleiner als# 9999999999999
Habe Vergleich auf 9999999999999 gesetzt #Sollte 20090303 sein#
20090304 ist lss #kleiner als# 9999999999999
Habe Vergleich auf 9999999999999 gesetzt #Sollte 20090304 sein#
20090305 ist lss #kleiner als# 9999999999999
Habe Vergleich auf 9999999999999 gesetzt #Sollte 20090305 sein#
Ich wuerde 20090305 loeschen.
Press any key to continue . . .

Bei folgender Verzeichnisstruktur....

03.03.2009 11:53 <DIR> Backup_20090303
03.03.2009 11:41 <DIR> Backup_20090304
03.03.2009 11:41 <DIR> Backup_20090305



Bitte um kundige Hilfe, ich werde hier wahnsinnig....
Mitglied: bastla
03.03.2009 um 18:38 Uhr
Hallo Boulder und willkommen im Forum!

Da Du eine durchgängige Namenskonvention hast, ist ein Zerlegen und Vergleichen gar nicht nötig - einfach nach Namen (absteigend) sortieren und den letzten Verzeichnisnamen verwenden:
for /f %%i in ('dir D:\Backup_* /b /o-n /ad') do set "Aeltestes=%%i"
Grüße
bastla
Bitte warten ..
Mitglied: Boulder
05.03.2009 um 13:13 Uhr
Danke schön. Funktioniert genau wie's sein soll.

Hier nochmal das komplette Script, falls jemand ein ähnliches Problem hat.

Das Script verschiebt eine Acronissicherung in ein Unterverzeichnis mit entsprechendem Datum
und löscht die ältesten Sichrungen wenn der Speicher knapp wird. Verbesserungen sind natürlich
immer Willkommen, laufen tut das Ganze aber bei mir fürs erste.

01.
@echo off 
02.
echo ====================Backup Batchscript===================== 
03.
echo ========================Version 1.0======================= 
04.
echo ==========================stable========================= 
05.
echo. 
06.
echo.  
07.
echo.  
08.
echo. 
09.
 
10.
set LW=F: 
11.
rem Datum ins Format JJJJ-MM-TT bringen 
12.
FOR /F "tokens=1,2,3 delims=. " %%a in ('date/T') do set CDATE=%%c%%b%%a 
13.
 
14.
rem Backup Verzeichnis anlegen und Tagesbackup in das Verzeichnis verschieben 
15.
IF EXIST F:\Backup.tib (GOTO :MOVE ) ELSE (GOTO :END ) 
16.
 
17.
:MOVE 
18.
IF NOT EXIST F:\Backup_%CDATE% mkdir F:\Backup_%CDATE% 
19.
move F:\Backup.tib F:\Backup_%CDATE% 
20.
GOTO :SPACE 
21.
 
22.
:SPACE 
23.
rem Freien Speicher auf dem Laufwerk rausfinden 
24.
FOR /F "tokens=3 delims= " %%i in ('dir %LW% /-c') do set frei=%%i 
25.
 
26.
set Zahl1=%frei% 
27.
set Zahl2=1048576 
28.
set Stellen=0 
29.
 
30.
set R=Rechne.vbs 
31.
echo Set a=WScript.Arguments:WScript.Echo FormatNumber(Eval(a(0)),a(1),,,0)>%R% 
32.
for /f %%i in ('cscript //nologo %R% "%Zahl1%/%Zahl2%" %Stellen%') do set Ergebnis=%%i 
33.
set frei=%Ergebnis% 
34.
del Rechne.vbs 
35.
 
36.
echo Freier Speicher auf %LW%          %frei% MB 
37.
echo. 
38.
 
39.
rem Groesse des letzten Backups rausfinden 
40.
FOR /F "tokens=2,3 delims= " %%h in ('dir %LW%\Backup_%CDATE% /-c') do IF "%%h" equ "File(s)" set belegt=%%i 
41.
 
42.
set Zahl1=%belegt% 
43.
set Zahl2=1048576 
44.
set Stellen=0 
45.
 
46.
set R=Rechne.vbs 
47.
echo Set a=WScript.Arguments:WScript.Echo FormatNumber(Eval(a(0)),a(1),,,0)>%R% 
48.
for /f %%i in ('cscript //nologo %R% "%Zahl1%/%Zahl2%" %Stellen%') do set Ergebnis=%%i 
49.
set belegt=%Ergebnis% 
50.
del Rechne.vbs 
51.
 
52.
set /a sicherheit=(%belegt%/2)*3 
53.
 
54.
echo Aktuelle Sicherung belegte:     %belegt% MB 
55.
echo. 
56.
echo Als Puffer fuer naechste  
57.
echo Sicherung erforderlich:         %sicherheit% MB 
58.
echo. 
59.
echo. 
60.
echo. 
61.
set frei=11 
62.
echo Frei gesetzt auf %frei% 
63.
if %frei% lss %sicherheit% (GOTO :VOLL) ELSE (GOTO :FREI) 
64.
 
65.
:VOLL 
66.
echo Zu wenig freier Speicher, loesche aelteste Tagessicherung 
67.
 
68.
for /f %%i in ('dir %LW%\Backup_* /b /o-n /ad') do set "Aeltestes=%%i" 
69.
echo Ich werde %aeltestes% loeschen. 
70.
pause 
71.
rd %LW%\%aeltestes% /s/q 
72.
GOTO :SPACE 
73.
 
74.
:FREI 
75.
echo Genuegend freier Speicher vorhanden 
76.
GOTO :END 
77.
 
78.
:ERROR 
79.
echo Fehler bei der Ausfuehrung des Backupscripts 
80.
GOTO :TERMINATE 
81.
 
82.
:END 
83.
echo Script fehlerfrei abgelaufen 
84.
 
85.
:TERMINATE
Einschränkungen:

Für englischsprachiges Windows geschrieben, in anderen Sprachvarianten muss
01.
FOR /F "tokens=2,3 delims= " %%h in ('dir %LW%\Backup_%CDATE% /-c') do IF "%%h" equ "File(s)" set belegt=%%i

geändert werden, z.B. in Datei(en)

Bei einer größenänderung von über 50% im Vergleich zum vorherigen Backup kann der Speicher trotzdem
volllaufen, da nur mit einer Sicherheit von 50% gerechnet wird.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...