Batch: Wert aus Zeile herausfiltern und dann Bytes in Gigabytes umrechnen
Hallo zusammen,
ich habe mir mit viel Bastelei eine Textdatei %HOSTNAME%.txt erzeugen lassen in der jeweils nur diese eine Zeile steht:
Ist halt die letzte Zeile des DIR Befehls, diese wird zentral von ca. 100 Systemen eingesammelt.
Jetzt rechne ich seltenst in Bytes und möchte diesen Wert daher in Gigabytes umrechnen lassen, am liebsten auch per Script - aber wie?
Zuerst müsste ich ja den Wert erstmal als solchen isolieren, aber dann?
Freue mich auf eure Ideen,
Dominik
ich habe mir mit viel Bastelei eine Textdatei %HOSTNAME%.txt erzeugen lassen in der jeweils nur diese eine Zeile steht:
12 Dir(s) 37.184.610.304 bytes free
Ist halt die letzte Zeile des DIR Befehls, diese wird zentral von ca. 100 Systemen eingesammelt.
Jetzt rechne ich seltenst in Bytes und möchte diesen Wert daher in Gigabytes umrechnen lassen, am liebsten auch per Script - aber wie?
Zuerst müsste ich ja den Wert erstmal als solchen isolieren, aber dann?
Freue mich auf eure Ideen,
Dominik
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 237535
Url: https://administrator.de/contentid/237535
Ausgedruckt am: 21.11.2024 um 22:11 Uhr
5 Kommentare
Neuester Kommentar
Bei dieser Zahlengröße wirst du die Fehlermeldung "Ungültige Zahl. Zahlen sind begrenzt auf eine Genauigkeit von 32 Bits.", da Du in CMD nur mit Zahlen von -2147483648 bis 2147483647 rechnen kannst.
Ich hab es grad getestet. Das Auschneiden von Werten ist ganz gut im Netz erklärt. Einfach mal googeln. Das hilft dir an dieser Stelle aber nicht weiter. Du solltest daher z.B. über ein VBScript gehen.
Das gleiche Problem wurde hier schon einmal besprochen. Daher anbei der Link.
Umrechnung von Byte auf Gigabyte
Ich hab es grad getestet. Das Auschneiden von Werten ist ganz gut im Netz erklärt. Einfach mal googeln. Das hilft dir an dieser Stelle aber nicht weiter. Du solltest daher z.B. über ein VBScript gehen.
Das gleiche Problem wurde hier schon einmal besprochen. Daher anbei der Link.
Umrechnung von Byte auf Gigabyte
Hallo yakazaa!
Wie ThomasM (BTW: Willkommen im Forum!) schon erklärt hat, kann das ein Batch arithmetisch nicht leisten - was allerdings ginge, wäre die Byte-Angabe zunächst als Text zu interpretieren und dann durch Weglassen von 9 Stellen am Ende zu einer durch 1 Milliarde dividierten (abgerundeten) Zahl zu machen - für Dein
Grüße
bastla
Wie ThomasM (BTW: Willkommen im Forum!) schon erklärt hat, kann das ein Batch arithmetisch nicht leisten - was allerdings ginge, wäre die Byte-Angabe zunächst als Text zu interpretieren und dann durch Weglassen von 9 Stellen am Ende zu einer durch 1 Milliarde dividierten (abgerundeten) Zahl zu machen - für Dein
dir
etwa so:@echo off & setlocal
for /f "tokens=3" %%i in ('dir /-c D:') do set "B=%%i"
set "GB=%B:~,-9%"
if not defined GB (
echo weniger als 1 GB frei
) else (
echo mindestens %GB% GB frei
)
bastla
Hallo Dominik,
unabhängig davon, dass man vermutlich nicht mit einer temporären Datei arbeiten muss und dass der DIR Befehl zudem die Option
Bspw.:
Versteht sich von selbst, dass man den Wert für die Variable line auch aus deiner Datei einlesen kann.
Grüße
rubberman
EDIT: DelayedExpansion vergessen
unabhängig davon, dass man vermutlich nicht mit einer temporären Datei arbeiten muss und dass der DIR Befehl zudem die Option
/-C
unterstützt, um das Tausendertrennzeichen zu unterdrücken, gibt es auch Workarounds für Batch pur um das 32Bit Limit zu umschiffen.Bspw.:
@echo off &setlocal
set "line=12 Dir(s) 37.184.610.304 bytes free"
for /f "tokens=3" %%i in ("%line:.=%") do call :B2GiB %%i
echo %errorlevel:~0,-2%,%errorlevel:~-2%
pause
goto :eof
:B2GiB
setlocal EnableDelayedExpansion
set "B=%~1"
set "highPart=%B:~0,-6%"
set "lowPart=%B:~-6%"
set /a "KB = highPart / 1024 * 1000000, borrow = highPart %% 1024"
if %borrow% gtr 0 (
set "lowPart=%borrow%%lowPart%""
) else (
for /l %%a in (1,1,5) do if "!lowPart:~0,1!" equ "0" set "lowPart=!lowPart:~1!"
)
set /a "KB += lowPart / 1024, GB = KB / 1048576, HH = KB %% 1048576 * 100 / 1048576"
if %HH% lss 10 set "HH=0%HH%"
endlocal&exit /b %GB%%HH%
<"%HOSTNAME%.txt" set /p "line="
Grüße
rubberman
EDIT: DelayedExpansion vergessen
Danke. Hab mich gerade angemeldet, da ich seit letzter Woche der neue Admin bin. Der alte Admin in meiner Firma hatte keine Lust mehr. Ich hab bisher mehr Clients und CAD-Systeme betreut. Von Servern hab ich schon gute 8 Jahre nichts mehr gesehen. ^^