Verzeichnissgröße per Batch vergleichen.

Mitglied: cced-de

cced-de (Level 1) - Jetzt verbinden

19.06.2011 um 20:39 Uhr, 7372 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
Off Topic
Aqui - Wir möchten den Hasen zurück
NixVerstehenVor 22 StundenAllgemeinOff Topic35 Kommentare

Lieber aqui, ich finde es sehr sehr schade, das du dich hier so überraschend abgemeldet hast. Ich habe auch von dir sehr viel gelernt ...

Netzwerke
Erfahrungen mit HPE Aruba Switches (Aruba OS)
sixofeightVor 1 TagAllgemeinNetzwerke13 Kommentare

Holla zusammen, Wer von euch setzt Aruba Switches (Aruba OS, ehemals HP ProCurve) ein und wie sind eure Erfahrungen bzw. wie zufrieden seid ihr ...

Webentwicklung
Webdesigner ist verschwunden
Janno100Vor 1 TagFrageWebentwicklung4 Kommentare

Hallo zusammen Kunde hat einen Webdesigner der die Domain des Kunden vor einigen Jahren einfach unter seinen eigenen Name weiter geführt hat. Diese haben ...

Exchange Server
Exchange weist Mails ohne Log Eintrag ab
Mr.RobotVor 12 StundenFrageExchange Server16 Kommentare

Guten Morgen, wir haben seit letzter Woche ein ganz spannendes "Problem" oder sollte ich eher Phänomen sagen? Wir haben eine Tochtergesellschaft die allerdings IT-Technisch ...

Windows 10
Was ist zu wenig
ukulele-7Vor 8 StundenFrageWindows 1013 Kommentare

Hallo, ich suche nach einer Quelle um Windows 10 Pro OEM Lizenzen zu beziehen, gerne auch erstmal ein paar als Testkauf. Nun ist das ...

Windows Server
Server clonen
oGutITVor 1 TagFrageWindows Server5 Kommentare

Hallo ich habe einen alten HP Server Gen8 und möchte diese auf einen HP Microserver Gen8 klonen. Auf dem HP Server ist 2W12KR2 am ...

Netzwerke
2 fritzen mit unterschiedlichen subnetzen einrichten
gelöst alpi972Vor 1 TagFrageNetzwerke7 Kommentare

Hallo, hoffe ich habs unters richtige thema gesetzt, ich habe 2 fritzboxen (eine 7490 als DSL Modem und eine 7430 als Brige), und will ...

Router & Routing
Windows Netzwerklaufwerke durch kaskadiertes Netzwerk nicht ansprechbar
TomAustriaVor 1 TagFrageRouter & Routing5 Kommentare

Hallo, wir hatten bisher nur ein "einfaches" Netzwerk und möchten dieses nun in getrennte Netzwerksegmente aufteilen: Das Netz 192.168.2.x haben wir beim AX1500 an ...