Unbekannten Wert via Batch aus Datei auslesen und verwenden
Guten Morgen,
ich bin zur Zeit etwas unbeholfen beim schreiben, ein gewaltiges Brett vor dem Kopf, welches nicht wanken will, daher hoffe ich auf eure Hilfe, nun zu dem Problem:
Ich bin auf der Suche gewesen nach einer Möglichkeit den freien Speicherplatz auf einem Serverlaufwerk zu ermitteln und diesen mit einem Wert abzugleichen, bei einem Schwellenwert sollte dann eine E-Mail versendet werden mit:
Warnung auf E ist zu wenig Speicher verfügbar.
Anhand von diesem Topic:
Prozentzahl aus Textdatei via Batch auslesen und verwenden
hatte ich die Idee eine Abfrage zu gestallten, jedoch tue ich mich schwer damit dieses auch wirklich funktionierend zu gestalten.
Soweit so gut, bis dahin hatte es auch gut funktioniert, die Datei sieht dann soweit gut aus.
Jedoch brauche ich ja nur das letztere Laufwerk:
Das Relevante Laufwerk ist dann:
Dieses bekomme ich noch nicht extrahiert
Und dort sollte dann bei dem Unterschreiten von 2GB beim freien Speicher, dann eine E-Mail versand werden.
Ich habe mich dann auch schon mal daran versucht, mit allen Laufwerken soweit weiter zu machen und den Scripten aus dem anderen Thread, eine Ausgabe hinzubekommen die nur den freien Speicher (in GB) als Wert liefert
Und hierbei verstehe ich noch nicht ganz die Syntax, aber ich hoffe auf dem richtigen Weg zu sein
Jedoch habe ich, wenn ich versuche es abzuwandeln, entweder:
Fehlender Operator, oder 0 als Ausgabewert.
Ich hoffe ihr könnt mir so kurz vor dem neuen Jahr noch helfen.
Dank im vorraus
---Edit---
Ein Brett ist verschwunden und mit mir geht es Berg auf, der letztere Teil ist schonmal bearbeitet und liefert nur noch die Werte die ich Suche:
Nun sollte ich die in eine Variable packen und abgleichen mittels einer Abfrage. Darauf die mail versenden und dann kann das neue Jahr losgehen
--to be continued--
ich bin zur Zeit etwas unbeholfen beim schreiben, ein gewaltiges Brett vor dem Kopf, welches nicht wanken will, daher hoffe ich auf eure Hilfe, nun zu dem Problem:
Ich bin auf der Suche gewesen nach einer Möglichkeit den freien Speicherplatz auf einem Serverlaufwerk zu ermitteln und diesen mit einem Wert abzugleichen, bei einem Schwellenwert sollte dann eine E-Mail versendet werden mit:
Warnung auf E ist zu wenig Speicher verfügbar.
Anhand von diesem Topic:
Prozentzahl aus Textdatei via Batch auslesen und verwenden
hatte ich die Idee eine Abfrage zu gestallten, jedoch tue ich mich schwer damit dieses auch wirklich funktionierend zu gestalten.
psinfo \\srvd\ -d >test.txt
Soweit so gut, bis dahin hatte es auch gut funktioniert, die Datei sieht dann soweit gut aus.
Jedoch brauche ich ja nur das letztere Laufwerk:
Volume Type Format Label Size Free Free
A: Removable 0.0%
C: Fixed NTFS 10.00 GB 3.42 GB 34.2%
D: Fixed NTFS 14.98 GB 10.70 GB 71.5%
E: Fixed NTFS Volume 130.01 GB 6.58 GB 5.1%
F: CD-ROM 0.0%
Das Relevante Laufwerk ist dann:
E: Fixed NTFS Volume 130.01 GB 6.58 GB 5.1%
Dieses bekomme ich noch nicht extrahiert
Und dort sollte dann bei dem Unterschreiten von 2GB beim freien Speicher, dann eine E-Mail versand werden.
Ich habe mich dann auch schon mal daran versucht, mit allen Laufwerken soweit weiter zu machen und den Scripten aus dem anderen Thread, eine Ausgabe hinzubekommen die nur den freien Speicher (in GB) als Wert liefert
@echo off & setlocal
for /f "delims=" %%a in ('findstr /c:" GB " \test.txt') do set "Line=%%a" & call :ProcessLine
goto :eof
:ProcessLine
set /a Free=%Line:~-6,3%
echo %Free%
Und hierbei verstehe ich noch nicht ganz die Syntax, aber ich hoffe auf dem richtigen Weg zu sein
Jedoch habe ich, wenn ich versuche es abzuwandeln, entweder:
Fehlender Operator, oder 0 als Ausgabewert.
Ich hoffe ihr könnt mir so kurz vor dem neuen Jahr noch helfen.
Dank im vorraus
---Edit---
Ein Brett ist verschwunden und mit mir geht es Berg auf, der letztere Teil ist schonmal bearbeitet und liefert nur noch die Werte die ich Suche:
@echo off & setlocal
for /f "delims=" %%a in ('findstr /c:" GB " \test.txt') do set "Line=%%a" & call :ProcessLine
goto :eof
:ProcessLine
set /a Free=%Line:~-15,2%
echo %Free%
Nun sollte ich die in eine Variable packen und abgleichen mittels einer Abfrage. Darauf die mail versenden und dann kann das neue Jahr losgehen
--to be continued--
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 104921
Url: https://administrator.de/forum/unbekannten-wert-via-batch-aus-datei-auslesen-und-verwenden-104921.html
Ausgedruckt am: 22.04.2025 um 00:04 Uhr
10 Kommentare
Neuester Kommentar
Hier mal die erweiterung dazu:
blat ... ist der aufruf des Programmes blat.exe. Dieses kann emails versenden. Die genauen Parameter kanst du auf der internetseite zum Programm sehen oder schau hier im Bereich Batch udn Shell. Hier wurde dieses Programm schon öfters besprochen.
@echo off & setlocal
for /f "delims=" %%a in ('findstr /c:" GB " \test.txt') do set "Line=%%a" & call :ProcessLine
if %Free% gtr 2 blat ...
goto :eof
:ProcessLine
set /a Free=%Line:~-15,2%
echo %Free%
blat ... ist der aufruf des Programmes blat.exe. Dieses kann emails versenden. Die genauen Parameter kanst du auf der internetseite zum Programm sehen oder schau hier im Bereich Batch udn Shell. Hier wurde dieses Programm schon öfters besprochen.
Hallo Entlein und willkommen im Forum, hallo miniversum!
Auf Basis Eurer Entwürfe sollte (zur Vorsicht auch unter Berücksichtigung der angegebenen Einheit - es könnten ja zB nur noch 800 MB frei sein) - und mit alleiniger Berücksichtigung des Laufwerkes E: etwa folgende Version klappen:
Für den Fall, dass die Zeile für das Laufwerk E: nicht gefunden würde, wäre noch eine sinnvolle Aktion zu überlegen.
Vielleicht wäre auch die Verwendung des ohenhin zur Verfügung stehenden Prozentsatzes an freiem Speicher eine brauchbare Alternative (dadurch könnte die Unterscheidung nach Einheiten entfallen) ...
Grüße
bastla
Auf Basis Eurer Entwürfe sollte (zur Vorsicht auch unter Berücksichtigung der angegebenen Einheit - es könnten ja zB nur noch 800 MB frei sein) - und mit alleiniger Berücksichtigung des Laufwerkes E: etwa folgende Version klappen:
@echo off & setlocal
set "Min=2"
set Line=
for /f "delims=" %%a in ('findstr /c:"E: Fixed" \test.txt') do set "Line=%%a"
if not defined Line echo Keine Info fuer LW E: gefunden! & REM sinnvolle Aktion
set Mail=
for /f "tokens=1-3 delims=. " %%i in ("%Line:~-18,11%") do (
set "Frei=%%i,%%j"
set "Einh=%%k"
if "%%k" neq "GB" set Mail=true
if %%i lss %Min% set Mail=true
)
if defined Mail echo Nur mehr %Frei% %Einh% frei! --^> blat ...
Vielleicht wäre auch die Verwendung des ohenhin zur Verfügung stehenden Prozentsatzes an freiem Speicher eine brauchbare Alternative (dadurch könnte die Unterscheidung nach Einheiten entfallen) ...
Grüße
bastla
@miniversum
Gemeint (und geschrieben
) ist: Wenn %Mail% existiert, dann soll eine Mail verschickt werden.
%Mail% ist nur gesetzt, wenn die Einheit nicht "GB" ist ("TB" scheiden in diesem konkreten Fall ja als Möglichkeit aus) oder wenn der ganzzahlige Anteil des freien Speichers (%%i) unter dem Wert %Min% liegt (lss %Min%) ...
Grüße
bastla
Kann es seind as da ein kleiner Fehler in der Zeile 15 ist?
Das würde ich für meine Batches nie a priori ausschließen wollen, allerdings:Gemeint (und geschrieben
%Mail% ist nur gesetzt, wenn die Einheit nicht "GB" ist ("TB" scheiden in diesem konkreten Fall ja als Möglichkeit aus) oder wenn der ganzzahlige Anteil des freien Speichers (%%i) unter dem Wert %Min% liegt (lss %Min%) ...
Grüße
bastla
Ja so habe ich dienen Code auch verstanden. Allerdings würde dann ja eine Mail verschickt werden wenn der Schwellwert unterschritten ist und nicht überschritten. Ich verstehe es so das eine Mail nur geschickt werden soll wenn zu wenig Speicher frei ist, also der Grenzwert überschritten wird. Daher mein Einwand.
@miniversum
Da mit dem Schwellwert für mich eigentlich die Untergrenze des (benötigten / gewünschten) freien Speicherplatzes gemeint ist, sehe ich keine Notwendigkeit, bei "Nicht-Unterschreitung" dieser Untergrenze eine Mail zu verschicken (und der von Entlein verwendeten Formulierung "... bei dem Unterschreiten von 2GB beim freien Speicher ..." würde ich diese auch nicht entnehmen) ...
Grüße
bastla
Da mit dem Schwellwert für mich eigentlich die Untergrenze des (benötigten / gewünschten) freien Speicherplatzes gemeint ist, sehe ich keine Notwendigkeit, bei "Nicht-Unterschreitung" dieser Untergrenze eine Mail zu verschicken (und der von Entlein verwendeten Formulierung "... bei dem Unterschreiten von 2GB beim freien Speicher ..." würde ich diese auch nicht entnehmen) ...
Grüße
bastla