Verzeichnissgröße per Batch vergleichen.

Mitglied: cced-de

cced-de (Level 1) - Jetzt verbinden

19.06.2011 um 20:39 Uhr, 7326 Aufrufe, 20 Kommentare, 2 Danke

Hallo zusammen,
ich möchte die Größe eines Verzeichnisses auslesen, danach soll geprüft werden, ob der Inhalt des Verzeichnisses 4 GB überschreitet.
Ist dies der Fall, soll ein Archiv aus dem Verzeichniss mittels 7Zip erstellt werden und mehrere Volumes daraus erstellt werden.
Ist der Verzeichnissinhalt kleiner als 4 GB, soll nur ein gewöhnliches Archiv ohne Volumes erstellt werden.

Hier mein Ansatz:


Ich denke mein Problem liegt bei Zeile 12 + 13.
Wenn ich so ein Verzeichnis mit z.B. 98.769.255 MB Prüfen lasse, geht das Script davon aus, dass es größer als 4 GB ist.
Ich denke mal es liegt an den Dezimalstellen.

Hat da vielleicht jemand eine Lösung für mich?
Gruß CCED
Mitglied: Friemler
19.06.2011 um 21:25 Uhr
Hallo CCED,

zur Bestimmung der Größe aller Dateien im übergebenen Verzeichnis und darunterliegenden Verzeichnissen würde ich folgendes verwenden:

Dann brauchst Du das Batchscript nicht rekursiv starten, was ohne ein CALL vor dem @%0 in Zeile 2 ja sowieso nicht funktioniert hätte. ;-) face-wink

Wegen dem Parameter /s durchläuft der DIR-Befehl das übergebene und alle darunterliegenden Verzeichnisse und zeigt wegen /-c in der Zusammenfassung die Gesamtgröße aller Dateien ohne Tausendertrennzeichen an. DIR /S gibt einmal nach jedem Verzeichnis die Größe aller darin enthaltenen Dateien aus und zum Schluss die Größe aller angezeigten Dateien. Alle diese Zeilen enthalten den String "Datei(en)" und werden von FIND deshalb gefunden, der letzte Fund ist der richtige.

Gruß
Friemler


[EDIT]
HALT, STOP!! ;-) face-wink
Mit Variablen in Batchscript kann nur bis +2147483648=2^31 gerechnet werden! Du musst Deine Grenzen anders setzen, 4GB sind zu groß.
[/EDIT]
Bitte warten ..
Mitglied: pieh-ejdsch
19.06.2011 um 21:51 Uhr
moin cced-de,

die CMD rechnet nur bis knapp 2 Giga so wie sie soll.
und wenn die Linke Seite Größer als 999999 ist Rechnet es auch immer richtig.
entweder Du Rechnest das zusammen wie hier Inhalt Verschieben zum sichern auf Externe Medien nach Dateianzahl bzw Medium Groesse mit Logging in Ordner

oder Teilst Den Ausgabestring der Größe in zwei bestandteile



[Edit] etwas zu spät und noch eine Option /s speniert [7eDIT]
Gruß Phil
Bitte warten ..
Mitglied: cced-de
19.06.2011 um 22:30 Uhr
Zitat von @Friemler:
[EDIT]
Mit Variablen in Batchscript kann nur bis +2147483648=2^31 gerechnet werden! Du musst Deine Grenzen anders setzen, 4GB sind zu
groß.
[/EDIT]

Hallo Friemler,
hmmm naja, in manchen Verzeichnissen liegen nun mal mehr als 4 GB..
Es gibt doch sicher die Möglichkeit die Ergebniszahl aus meinem Script z.B. 85.477.161.058 (85 GB)
in eine z. B. zweistellige Zahl (85) umzuwandeln... und dann diese einfach mit dem angegebenen Wert 4
zu "vergleichen"... Also
oder ?
Gruß CCED
Bitte warten ..
Mitglied: cced-de
19.06.2011 um 22:36 Uhr
Hallo Phil,

auch dir danke für deine Mühe.
Ich habe deinen Ansatz mal ein wenig verändert:

aber auch so glaubt cmd immer der Wert sei größer als 4294.
:-( face-sad

Gruß CCED
Bitte warten ..
Mitglied: Friemler
19.06.2011 um 22:58 Uhr
Das Problem ist, dass Du mit dem Wert der Variablen Size aus meinem Skript nicht rechnen und auch keine Vergleiche durchführen kannst. Bei einem GTR oder LSS usw. wird intern auch gerechnet. Wenn der Wert von Size dann gößer 2^31 - 1 ist (die größtmögliche positive Zahl), kommt wieder Mist dabei heraus.

Ich habe die Tage in irgendeinem Batchforum einen Beitrag zum Thema gesehen, ich schau mal nach, ob ich den nochmal finde. In dem Beitrag ging es um das Rechnen mit noch viel größeren Zahlen.

Gruß
Friemler
Bitte warten ..
Mitglied: pieh-ejdsch
19.06.2011 um 23:04 Uhr
in Zeile 05 ist ein = beim SET zuviel. Das hatte ich schon weg-editiert. Du hast dieses aber noch mit drinnen. Probier es nochmal.

Gruß Phil
Bitte warten ..
Mitglied: cced-de
19.06.2011 um 23:25 Uhr
Hi Phil...
the same :-( face-sad

habe das = mal rausgenommen, funktioniert aber nicht!
So siehst jetzt aus...


Gruß CCED
Bitte warten ..
Mitglied: bastla
19.06.2011 um 23:45 Uhr
Hallo cced-de!

Es wundert mich, dass es mit dem Komma in der Zeile 2 überhaupt funktioniert hätte - versuch es einmal mit
Ansonsten solltest Du mit einem
als (zusätzliche) Zeile 7 bessere Chancen haben ... ;-) face-wink

Grüße
bastla
Bitte warten ..
Mitglied: Friemler
19.06.2011 um 23:48 Uhr
Hallo CCED,

ich habe das Script gefunden. Es stammt von hier. In dem dort erhältlichen ZIP-File sind noch andere mathematische Unterprogramme zum Verrechnen von großen Zahlen enthalten (addieren, multiplizieren).

Ich habe Deinen und meinen Code mit dem von mir angepassten Script verschmolzen. Die Copyright-Klausel des Autors ist enthalten.


Gruß
Friemler


[EDIT]
Die Methode zur Ermittelung der Gesamtdateigröße von pieh-ejdsch ist sicherer.
[/EDIT]
Bitte warten ..
Mitglied: pieh-ejdsch
20.06.2011 um 00:27 Uhr
und zu dem von bastla als Zusatz in der Zeile 05. 2 einsen sponsoren
Dann klappts auch mit den Vornullen.

Gruß Phil
Bitte warten ..
Mitglied: ovu-p86
20.06.2011 um 00:32 Uhr
Hallo cced-de,

hier noch mal eine einfache Lösung.

Das Problem bisher lag, glaub ich, daran, daß die Auswertungen sich immer auf zu gr. Zahlen bezogen haben
(32-bit-Problem). Der kleine Zwischenschritt in Zeile 4 des cmd löst das Problem. Jetzt sind die Zahlen
handle, auswertbar.

Das "For" hab ich etwas geändert. Hab insbesondere auch hidden-, system- u.s.w Dateien mit einbezogen.
Wenn das nicht angegeben wird, ist das Ergebnis des "dir" verfälscht (System u. Hidden-Files fehlen dann
im Ergebnis).


Den cmd kannst du ja zunächst mal ausprobieren.
Bei mir haut er hin.
Einfach das "Set PackFile" im Script mit deinen Verz. anpassen und testen.

Das "echo" kannst du dann ja später, wenns passt, beim Einbau in deinen Scipt mit deinen Befehlen ersetzen.


Gruß
Uwe

[EDIT]
hab die Größe auf 4293 statt 4294 gesetzt, da ja 6 Stellen in der Größe abgeschnitten werden.
Bei 4294 könnte ja durch die fehlenden 6 Stellen das Ganze doch größer als 4GB sein
[/EDIT]
Bitte warten ..
Mitglied: cced-de
20.06.2011 um 01:01 Uhr
Ihr seit die Größten hier !!!

Alle drei Lösungen funktionieren!!!
Danke für eure Zeit und eure Hilfe !!

Hier nochmal der zusammenhängende Code von Phil... so wie er funktioniert !


Nochmals meinen Dank!!

Gruß CCED (Markus)
Wird Zeit fürs Bett, um 05:00 Uhr ist die Nacht vorbei :-) face-smile
Bitte warten ..
Mitglied: ovu-p86
20.06.2011 um 01:16 Uhr
Hallo cced-de,

eine Lösung reicht ja. Wenns funktioniert.

Aber würde dringend empfehlen beim "dir" noch "/a: d r h a s" anzufügen. (vielleicht etwas überkandidelt, aber unschädlich)
Wie gesagt, sonst ist das Ergebnis verfälscht. Hidden und System-Dateien werden im Ergebnis ohne das
nicht berücksichtigt.

Gruß
Uwe
Bitte warten ..
Mitglied: Biber
20.06.2011 um 01:44 Uhr
Nich' hauen jezz', ovu-p86,

Zitat von @ovu-p86:
Aber würde dringend empfehlen beim "dir" noch "/a: d r h a s" anzufügen. (vielleicht etwas überkandidelt, aber unschädlich)
... in der Sache gebe ich dir (teilweise) recht - aber das Ergebnis "Alle Dateien mit welchem Attribut auch immer" bekommst du schneller mir "DIR /a *.*"

Und "teilweise" recht soll heissen. .it depends....
Wenn CCED nur die Dateien packt, die sinnvoll sind, dann gehören z.B. hidden files wie desktop.ini's nicht dazu.
Und in seinem Fall scheint es, er wolle auch nur "Daten" sichern = alles Sichtbare,

Grüße
Biber
Bitte warten ..
Mitglied: ovu-p86
20.06.2011 um 02:08 Uhr
Hallo Biber,

warum?

Eher, danke für den Hinweis. Wußte gar nicht, daß nur "/a" identisch mit "/a: d r h a s" ist.
Spart mir doch Schreibarbeit.

Ansonsten;
Meines Wissens nach haut 7-zip alles, also auch hidden u. system, ins zip.
Deshalb gehe ich bzgl. des Ergebnisses lieber auf Nummer sicher.
(Obwohl das hier natürlich eher theoretisch ist, da das Ganze ja noch gezippt also verkleinert wird
und dadurch eh genug Spielraum für ein ungenaues Größenergebnis ist, ohne das es Auswirkungen
hat.. Kommt also auf ein Pfund mehr nicht an.)

Das "it depends. ..." trifft natürlich zu. Bsp. wäre wenn ich die Größe eines Verz. abfrage, um hinterher
z.B. mit xcopy was zu kopieren (wo ich hidden u. system nicht eingeschlossen habe)


Gruß
Uwe
Bitte warten ..
Mitglied: bastla
20.06.2011 um 08:04 Uhr
@ovu-p86
... und wenn wir schon beim Thema sind:
liefert alle Dateien ...

Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
20.06.2011 um 14:38 Uhr
moin,

da Friemler so einen Superschicken Code mit "nur zu verwenden mit Copyright Infos" hier hereingestellt hat (ich frag mich manchmal was bei ein bissel BatchZeilen geschütz werden muss???)

hier nochmal eine Absolut Free Variante davon:

Gruß Phil
Bitte warten ..
Mitglied: Friemler
20.06.2011 um 15:09 Uhr
Hallo pieh-ejdsch,

Zitat von @pieh-ejdsch:
ich frag mich manchmal was bei ein bissel BatchZeilen geschütz werden muss???

der Autor des Codes kommt sehr wahrscheinlich aus USA und dort gibt es Softwarepatente. Er schreibt in seiner Copyright-Klausel ja auch, dass der Code frei ist, dass aber niemand anderes diesen Code unter sein Copyright stellen darf und somit anderen die Benutzung verbieten kann. Wohl kann aber fremder Code, der diesen Code benutzt, unter ein Copyright gestellt werden. Ich habe das dringelassen, weil ich mich nicht mit fremden Federn schmücken möchte.

Gruß
Friemler
Bitte warten ..
Mitglied: pieh-ejdsch
20.06.2011 um 15:37 Uhr
ach so is das gemeint - wer nicht Guttenbergen will soll die Quelle nicht Vergessen ... und den Doktor machen!

aber warum wird in diesem Code ein Errolevel 0 ausgeben wenn die Zahlen gleich sind?
Das Programm heist doch "isLarger" und nicht isEqual - naja das weiss nur der Brain äähhm ich meinte Brian.

Gruß Phil
Bitte warten ..
Mitglied: Friemler
20.06.2011 um 15:54 Uhr
Hey pieh-ejdsch,

das mit dem Errorlevel stammt von mir, das meinte ich u.a. mit Anpassungen. Ich habe mich bei den Codes (0, 1, -1) am Verhalten von vergleichbaren Funktionen in höheren Programmiersprachen orientiert.

Evtl. habe ich mit meinen Anpassungen aber auch die Funktion des Codes von Brian eingeschränkt. Er schreibt ja, dass damit zwei Zahlen von jeweils ca. 4000 Stellen verglichen werden können. Das könnte in meiner Version nicht mehr so sein, da das den internen Code zur Übergabe von Parametern überfordern könnte. Brian hat in seiner Originalversion die Namen von Variablen, die die zu vergleichenden Zahlen enthalten, übergeben, quasi ein "Call-By-Reference" in Batch. Damit wäre aber die Übergabe von Konstanten nicht möglich gewesen.

Schau Dir doch mal das Original an, wie gesagt, das ZIP-File enthält auch noch andere interessante Batch-Unterprogramme.

Gruß
Friemler
Bitte warten ..
Heiß diskutierte Inhalte
Erkennung und -Abwehr
Wie geschickt sich Malware verstecken kann - Ein Beispiel aus der Praxis eines Security Experts
colinardoVor 1 TagTippErkennung und -Abwehr5 Kommentare

Servus Kollegen und Mitstreiter, da ja in letzter Zeit die Exchange-Lücken die Admin-Landschaft ziemlich aufgewirbelt haben und dabei auch immer mal wieder "sogenannte" Admins ...

Windows Server
Hat Microsoft die WindowsServerSicherung oder diskpart zerpatcht?
gelöst anteNopeVor 23 StundenFrageWindows Server3 Kommentare

Hallo, kann es eventuell sein, dass Microsoft mit seinen letzten Updates die WindowsServerSicherung bzw. diskpart zerschossen hat? Es häufen sich bei mir seit gestern ...

Windows 10
Windows 10 Updates im Abgesicherten Modus nicht möglich!
gelöst Yuuto.LucasVor 1 TagFrageWindows 1016 Kommentare

Hallo, ich habe aktuell ein Problem bei einem Kunden Rechner. Bei diesem gibt es Probleme mit dem Soundkarten Treiber hdaudio.inf wegen dem der PC ...

Windows 10
Lokales Profil wird beim Herunterfahren gelöscht!
Yuuto.LucasVor 1 TagFrageWindows 1012 Kommentare

Hallo, ich habe aktuell folgendes Problem. An einem Kundenrechner ist aktuell ein Lokales Profil eingerichtet (vorher ein Server Profil bei dem das gleiche Problem ...

Ubuntu
Cups-Server mit SMB lehnt Verbindungen ab (smb.conf)?
ErikHeinemannVor 13 StundenFrageUbuntu17 Kommentare

Guten Morgen, ich habe einen Ubuntu 20.04 Server mit Cups als Printspooler. Nun Soll noch Samba hinzugefügt werden für eine einfache Verwendung unter Windows. ...

Exchange Server
Kaspersky for Exchange Meldungen
gelöst wieoderwasVor 11 StundenFrageExchange Server11 Kommentare

Guten Morgen, wir haben bei uns einen Exchange 2013 mit Kaspersky for Exchange und Sophos auf Dateiebene. Heute Morgen habe ich einige von diesen ...

Vmware
VMware wird selbständig
ZeroTrustVor 1 TagInformationVmware

Dell Technologies trennt sich von seiner Tochterfirma VMware. Das spült Geld ins Hause Dell, das sich auf einen Post-COVID-Boom beim Hardware-Absatz vorbereitet. VMware entwickelt ...

Groupware
Lokale Mini-Groupware für Mail, Adressbuch und Kalender gesucht
AndreasKasselVor 11 StundenFrageGroupware9 Kommentare

Hallo zusammen, ich habe insgesamt 2 PCs, 1 Notebook, 1 Android-Tablet und ein Android-Smartphone. Weiterhin habe ich 2 Mail-Adressen bei 1&1 mit einer eigenen ...