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

Backupdateimanagement mit Bachtscript

Frage Entwicklung

Mitglied: FISI-Azubi2010

FISI-Azubi2010 (Level 1) - Jetzt verbinden

23.10.2008, aktualisiert 29.10.2008, 3750 Aufrufe, 10 Kommentare

Hallo,

Ich habe folgende Problemstellung:
Clients machen via Acronis True Image 2009 tägllich ein Differentieles Backup. Ich möchte nun das mittels der Vor- und Nachbefehlsoption von Acronis 2 Bachtfiles laufen die ein bisschen Dateimanagemend durchfüren.

Acronis erzeugt folgende filenamen:

Vollbackup: Username.tib
Differentieles Backup: Username?.tib //wobei Fragezeichen angibt das wievielte Differentiele Backup es ist.

also brauche 2 Batchfiles die folgendes bewirken:

Vor dem Backup:

Soll geprüft werden ob das letzte Differentiele Backup >= 30% der Größe des Vollbackups hat und das alte Vollbackup umbenennen in _Username.tib


Nach dem Backup:

Soll das ältere Differentielle Gelöscht werden
Mitglied: bastla
23.10.2008 um 16:16 Uhr
Hallo FISI-Azubi2010!

Nachdem wir nun wissen, was Du (für Deine Ausbildung) brauchst: Was davon hast Du schon?

Damit's ev ein wenig mehr wird: Schau Dir mit "for /?" (ziemlich am Ende des Hilfetextes) an, wie Du die Dateigröße ermitteln kannst ...

Grüße
bastla
Bitte warten ..
Mitglied: FISI-Azubi2010
24.10.2008 um 09:08 Uhr
Hallo Bastla und danke für die Antwort,

Das mit dem For hab ich nicht so ganz kapiert wie sähe die Zeile aus mit der ich die Größe einer bestimmten Datei abfragen würde?

01.
 
02.
set Pfad=Netzwerkpfad\Dateiname 
03.
 
04.
FOR /F " usebackq delims==" %i IN Pfad DO @echo %~zI 
???



ich habe bisher folgendes:

01.
 
02.
Für das Batch vor dem Backup: 
03.
 
04.
@ECHO OFF 
05.
 
06.
set Username=Beispiel 
07.
 
08.
REM -----------------------------------------------------------Datei umbenennen-------------------------------------------------- 
09.
 
10.
RENAME Netzlaufwerkpfad\Username.tib  _Username.tib 
11.
 
12.
 
13.
 
14.
Für das Batch nach dem Backup: 
15.
 
16.
@ECHO OFF 
17.
 
18.
set Username=Beispiel 
19.
 
20.
REM -----------------------------------------------------------Datei löschen   -------------------------------------------------- 
21.
 
22.
DEL Netzlaufwerkpfad\Dateiname 
23.
 
Bitte warten ..
Mitglied: bastla
24.10.2008 um 09:30 Uhr
Hallo FISI-Azubi2010!

wie sähe die Zeile aus mit der ich die Größe einer bestimmten Datei abfragen würde?
Die Richtung stimmt schon
01.
set "Pfad=Netzwerkpfad\Dateiname" 
02.
FOR %i IN ("%Pfad%") DO @echo %~zI
oder mit Zuweisung zu einer Variablen
01.
set "Pfad=Netzwerkpfad\Dateiname" 
02.
FOR %i IN ("%Pfad%") DO set "Bytes=%~zI" 
03.
@echo %Bytes%
Was Du mit der Variablen anstellen kannst, siehst Du bei "set /?" (Du wirst "set /a" benötigen), und Du solltest Dich auch für "if /?" interessieren ...

Grüße
bastla
Bitte warten ..
Mitglied: FISI-Azubi2010
27.10.2008 um 10:25 Uhr
Also ich hab mir das mal angeschaut und folgende Zeilen zusammengeschuhstert.

01.
@ECHO OFF 
02.
 
03.
set /a "Pfad=Netzwerkpfad\Dateiname"  
04.
 
05.
FOR %i IN ("%Pfad%") DO set "Bytes=%~zI"  
06.
 
07.
@echo %Bytes% 
08.
 
09.
Set /a Bytes2=%Bytes%/100*30 
10.
 
11.
IF %Bytes% CEQ %Bytes2% DO CALL RENAME  
12.
 
13.
REM ------------------------------------------------------Datei umbenennen-------------------------------------------------- 
14.
:RENAME 
15.
 
16.
RENAME Netzlaufwerkpfad\Username.tib  _Username.tib 
17.
 
18.
REM ------------------------------------------------------------------------------------------------------------------------ 
19.
 
Kann ich diese Bedingung verwenden und kann man in Batch mit einer Kommazahl multiplizieren?
Bitte warten ..
Mitglied: bastla
27.10.2008 um 10:46 Uhr
Hallo FISI-Azubi2010!

Hinsichtlich des "CEQ" musst Du noch einen weiteren Blick riskieren ...
Was Berechnungen unter CMD (Batch) angeht: Grundsätzlich kannst Du nur Ganzzahlen verwenden (für Dezimalstellen musst Du selbst Routinen erstellen), und daher wird es mit den 30 % nicht ganz genau gehen.

Für die Genauigkeit wäre es zwar besser, zunächst die Multiplilkation und dann erst die Division durchzuführen (da bei der Division eben nur der ganzzahlige Quotient weiter verwendet werden kann), allerdings gibt es eine Beschränkung der Genauigkeit auf 32 Bit (wovon das letzte Bit auch noch für das Vorzeichen "abgezwackt" wird, sodass die höchste positive Zahl 2^31 - 1 ist), was dazu führt, dass nur Zahlen bis 2.147.483.647 verwendet werden können - die Größe der .tib-Datei wird da vermutlich zum Problem ...

Eine Lösung dafür könnte sein, jeweiils auf die letzten 3 Stellen zu verzichten (und damit annähernd durch 1000 zu dividieren) und damit weiter zu rechnen. Das Bilden von Teilstrings ist ebenfalls in der Hilfe zu "set" zu finden.

Grüße
bastla
Bitte warten ..
Mitglied: FISI-Azubi2010
28.10.2008 um 09:32 Uhr
Hallo Bastla ich hab ein weiteres Problem das früher ansetzt bei den Zeilen

01.
 
02.
set /a "Pfad=C:\Test\Username.tib"  
03.
FOR /F %i IN ("%Pfad%") DO set "Bytes=%~zI"  
04.
 
05.
@echo %Bytes% 
06.
 
Bekomme ich die Fehlermeldung: "PFAD~zI" ist an dieser Stelle syntaktisch nicht verarbeitbar.

Habe das ganze dann mal Schritt für Schritt auf der Kommandozeile ausführt und folgende Zwischenmeldungen bekommen.
01.
C:\test> set /a "Pfad=C:\Test\Username.tib"  
02.
03.
C:\test>FOR %i IN ("%Pfad%") DO set "Bytes=%~zI"  
04.
Fehlender Operand
Bitte warten ..
Mitglied: bastla
28.10.2008 um 09:55 Uhr
Hallo FISI-Azubi2010!

Das überflüssige "/a" (Du willst ja nicht mit dem Pfad rechnen) beim "set" hatte ich schon oben übersehen ...

... aber das ebenfalls nicht benötigte "/F" beim "FOR" hast Du erst heute eingebaut.

Grüße
bastla
Bitte warten ..
Mitglied: FISI-Azubi2010
28.10.2008 um 11:32 Uhr
ja das war noch was ich probiert hatte so habs jetzt weitgehend hinbekommen mit der Dateigröße

ich hab jetzt folgendes:

01.
@echo OFF 
02.
 
03.
REM ----------------------------------------Ermittelung der Dateigröße des Vollbackups--------------------------- 
04.
  
05.
set "weg=C:\Test\Username1.tib"  
06.
 
07.
FOR %%F IN (%weg%) DO set "Bytes=%%~zF"  
08.
 
09.
echo %Bytes% 
10.
 
11.
set prefix=1000 
12.
 
13.
if %Bytes% GEQ %prefix% set "Bytes=%Bytes:~0,-3%" 
14.
 
15.
echo %Bytes% KiloByte 
16.
 
17.
if %Bytes% GEQ %prefix% set "Bytes=%Bytes:~0,-3%" 
18.
 
19.
echo %Bytes% MegaByte 
20.
 
21.
set groessevollbackup=%Bytes% 
22.
 
23.
echo %groessevollbackup% :: Übergabevariable groessevollbackup für Vergleich voll mit differentiel 
24.
 
also für die Berechnung der Dateigrößen vom Differentiellen Backup könnte ich die meisten zeilen Übernehmen
Nur wie krieg ich es jetzt hin, dass die Variable weg bei jedem durchgang im Format Username?.tib um eins erhöht wird. ? gibt an das wievielte Differentielle es ist.

Ich glaube man könnte es so machen das ich nen Zähler am ende des Scriptes setze den ich dann in eine Datei schreibe und diesen Wert am anfang auslese geht das ? bzw, wie gehts geschickter?
Bitte warten ..
Mitglied: bastla
28.10.2008 um 23:04 Uhr
Hallo FISI-Azubi2010!

Sieh Dir einmal die Ausgabe von
dir /b /on Username?.tib
an - vielleicht bringt Dich das auf eine Idee ("/od" könnte übrigens auch noch interessant werden).

Falls Du tatsächlich einen Wert in einer Datei zwischenspeichern wolltest, könntest Du einfach
>%Datei% echo %Wert%
zum Schreiben und
set /p Wert=<%Datei%
zum Einlesen verwenden (alternativ dazu natürlich auch per "for /f"-Schleife)

Grüße
bastla
Bitte warten ..
Mitglied: FISI-Azubi2010
29.10.2008 um 08:03 Uhr
Hab rausgefunden das ich das gar nicht brauch da Acronis immer mit 1 und 2 anfängt wenn das altere umbenannt oder gelöscht wird. Deshalb hab ich das jetzt etwas anders gemacht ich führe für die beiden Dateien die Größenberechnung durch falls sie dann existieren und führe dann diese 30% berechnung aus.

Das wäre jetzt das Script das vor dem Backup ausgeführt werden soll wenn das so Funktioniert muss ich es nur noch so hinbekommen dass die Berechnung der 30% stimmt annähernd stimmt.

kannste dir ja mal anschauen:

01.
 
02.
:: Variablen mit konstanten Werten 
03.
 
04.
set multiplikator=30 
05.
set prefix=1000 
06.
set teiler=100 
07.
set Username=test 
08.
 
09.
::Netzlaufwerk mappen 
10.
net use y: \\ip\Test /User:test Kennwort 
11.
 
12.
 
13.
if exist y:\%Username%.tib goto :Vollbackup 
14.
 
15.
 
16.
::----------------------------------------Ermittelung der Dateigröße des Vollbackups--------------------------- 
17.
 
18.
:Vollbackup 
19.
 
20.
set "datei=y:\%Username%.tib"  
21.
 
22.
FOR %%F IN (%datei%) DO set "Bytes=%%~zF"  
23.
 
24.
echo %Bytes% 
25.
 
26.
if %Bytes% GEQ %prefix% set "Bytes=%Bytes:~0,-3%" 
27.
 
28.
echo %Bytes% KiloByte 
29.
 
30.
if %Bytes% GEQ %prefix% set "Bytes=%Bytes:~0,-3%" 
31.
 
32.
echo %Bytes% MegaByte 
33.
 
34.
set groessevollbackup=%Bytes% 
35.
 
36.
echo %groessevollbackup%  
37.
 
38.
:: Übergabevariable groessevollbackup für Vergleich voll mit differentiel 
39.
 
40.
set vergleichsgroesse=%groessevollbackup%/100 
41.
set vergleichsgroesse=%vergleichsgroesse%*30 
42.
echo %vergleichsgroesse% 
43.
::Vergleichsgröße sind die 30% 
44.
 
45.
:: Abfrage ob Username1.tib nicht existiert falls ja dann gleich prüfung auf Username2.tib 
46.
 
47.
if not exist y:\%Username%1.tib (goto :Diff2) Else goto :Diff1 
48.
 
49.
::--------------------------------Ermittelung der Dateigröße des ersten Differentiellen Backups--------------- 
50.
 
51.
:Diff1 
52.
 
53.
set "datei=y:\%Username%1.tib"  
54.
 
55.
FOR %%F IN (%datei%) DO set "Bytes=%%~zF"  
56.
 
57.
echo %Bytes% 
58.
 
59.
if %Bytes% GEQ %prefix% set "Bytes=%Bytes:~0,-3%" 
60.
 
61.
echo %Bytes% KiloByte 
62.
 
63.
if %Bytes% GEQ %prefix% set "Bytes=%Bytes:~0,-3%" 
64.
 
65.
echo %Bytes% MegaByte 
66.
 
67.
set groessediffbackup=%Bytes% 
68.
 
69.
echo %groessediffbackup%  
70.
 
71.
 
72.
:: Übergabevariable groessediffbackup für Vergleich voll mit differentiel 
73.
 
74.
 
75.
if %groessediffbackup% GEQ %vergleichsgroesse% rename y:\%Username%.tib _%Username%.tib 
76.
 
77.
::--------------------------------Ermittelung der Dateigröße deszweiten Differentiellen Backups--------------- 
78.
 
79.
if exist C:\%Username%2.tib goto :Diff2 
80.
 
81.
:Diff2 
82.
 
83.
set "datei=y:\%Username%2.tib"  
84.
 
85.
FOR %%F IN (%datei%) DO set "Bytes=%%~zF"  
86.
 
87.
echo %Bytes% 
88.
 
89.
if %Bytes% GEQ %prefix% set "Bytes=%Bytes:~0,-3%" 
90.
 
91.
echo %Bytes% KiloByte 
92.
 
93.
if %Bytes% GEQ %prefix% set "Bytes=%Bytes:~0,-3%" 
94.
 
95.
echo %Bytes% MegaByte 
96.
 
97.
set groessediffbackup=%Bytes% 
98.
 
99.
echo %groessediffbackup%  
100.
 
101.
:: Übergabevariable groessediffbackup für Vergleich voll mit differentiel 
102.
 
103.
if %groessediffbackup% GEQ %vergleichsgroesse% rename y:\%Username%.tib _%Username%.tib 
104.
 
105.
 
106.
:: Netzlaufwerk entmappen 
107.
 
108.
net use /delete y: 
109.
 
110.
 
111.
pause 
112.
 
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
RODC über VPN - Verbindung weg (10)

Frage von stefan2k1 zum Thema Windows Server ...