Windows Eine kleine Aufgabe in BATCH

Windows Betriebssystem

chko

Member
Registriert
15 Jan. 2008
Beiträge
198
Hallo Zusammen,

da ich kein Programmierer bin, geschweige denn regelmäßig in Batch programmiere, würde ich mich über eine kleine Hilfestellung freuen, da ich bereits seit mehreren Wochen trotz einiger Bemühungen das Problem nicht gelöst kriege.

Ich benötige ein kurzes Skript welches die Größe eines Ordners in Gigabyte ermittelt und diesen Wert ganzzeilig in eine Variable schreibt.
Der Ordner heißt also beispielsweise "D:\Test".
Die Variable heißt GROESSE.
Die Größe des Ordners soll ganzahlig in Gigabyte ausgegeben werden. Also bspw. bei 17,96 GB Ordnergröße mit dem Wert "18".


Ich bin mittlerweile schon soweit, dass die Ordnergröße mit dem Systemtool du.exe (Sysinternals) zwar angezeigt wird ich bekomme es jedoch nicht hin, die Ordnergröße ganzahlig in eine Variable zu schreiben. Alternativ lässt sich freilich auch der Befehl dir /s nutzen. Auch hier komme ich aber einfach nicht weiter.

Es gelingt mir nicht die FOR - Schleife richtig anzuwenden und mit tokens bzw. findstr sauber auszulesen. Mir fehlen leider auch die Grundlagen zur Programmierung in Batch. Vielleicht mag mir jemand kurz helfen und das in einem einfachen Programmierbeispiel zusammenstellen.

Wenn sich jemand dafür interessieren sollte, wo für ich das benötige: Die Ordnergröße soll ermittelt werden, um dann automatisch ein verschlüsseltes Volume in Veracrypt zu erzeugen, dieses zu mounten und Dateien da hinein zu kopieren.
 
Auch wenn ich kein "Skripter" bin würde ich doch eher Powershell empfehlen, damit dürfte man wesentlich eleganter unterwegs sein.

Für das spezifische Problem habe ich


gefunden. Eventuell hilft es ja.

Sofern möglich macht es eventuell Sinn (ggf. um sensible Daten reduziert) das Skript, das du bis jetzt erarbeitet hast hier in einem Code-Block zu zeigen.
 
Ich schwenk seit ner Weile auf PS um, aber das ist recht easy.
Deine challenge wird sein es dann auf deutsch umzuschreiben. ;)

@echo off
set Folder=C:\ProgramData
set Tool=du64.exe

for /f "tokens=2* delims=:" %%i in ('%Tool% "%Folder%" ^| find /i "Size:"') do (
:: echo %%i
set Size=%%i
)
::Entfernt "bytes"
set Size=%Size:bytes=%
::Entfernt "."
set Size=%Size:.=%
::Entfernt leerzeichen
set Size=%Size: =%
::Entfernt die letzten 3 Stellen damit set /a nicht direkt aufs Dach steigt. ggf. auf 6 erweitern.
set Size=%Size:~0,-3%
::Berechnet KB/MB/GB
set /a Size=%Size%/1024/1024
::Final result
echo %Size% GB

Du kannst die entsprechend in jede Zeile sonst immer noch ein echo %Size% einbauen damit du die einzelnen Schritte siehst.
Delims bestimmt den delimiter (in dem Fall ":") weil: "Size:" und Tokens bestimmt welches passende Element genutzt werden werden soll. Hier kann man verschiedene Möglichkeiten nutzen. Weitere Ausführungen spar ich mir aber.
Wenn dir die paar Zeilen deutlich helfen oder was Wert sind kannst du gerne was an die Aktionen hier im board spenden. // Kein muss, keine Aufforderung.
 
Zuletzt bearbeitet:
Ich würde auch eine andere Skriptsprache empfehlen, das ist extrem trivial mit einem besseren Werkzeug. Persönlich würde ich Python empfehlen. Bei der nächsten Änderungen oder den Wunsch nach einer weiteren Komfortfunktion stehst du wieder vor den Problem. Batch-Skripte haben ihre Daseinsberechtigung aber man merkt ja wie scheinbar absolut simple Sachen so einen Affentanz benötigen.
 
Also ich würde dem nur teilweise zustimmen. Ich hab in Batch ein gesamtes Framework geschaffen das Produktiv im Einsatz ist und sehr komplex ist. Klar, das ist nicht state-of-the-art aber das Sachen in einen Affentanz gipfeln würde ich nicht sagen.
 
Mit PS sollte
$GROESSE = "{0:N0}" -f ((gci "D:\Test" | measure Length -s).Sum /1GB)
reichen
 
Perfekt. Vielen Dank. KNARZ hat das Haus gerockt!
Beitrag automatisch zusammengeführt:

Und auch noch so gut kommentiert, dass ich was dabei gelernt habe.
 
Zuletzt bearbeitet:
  • ok1.de
  • ok2.de
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben