Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Batch: Wert aus Zeile herausfiltern und dann Bytes in Gigabytes umrechnen

Frage Entwicklung Batch & Shell

Mitglied: yakazaa

yakazaa (Level 1) - Jetzt verbinden

08.05.2014 um 18:00 Uhr, 2423 Aufrufe, 5 Kommentare

Hallo zusammen,

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
Mitglied: ThomasM
08.05.2014, aktualisiert um 20:09 Uhr
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.
http://www.administrator.de/forum/umrechnung-von-byte-auf-gigabyte-1823 ...
Bitte warten ..
Mitglied: bastla
08.05.2014 um 20:35 Uhr
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 dir etwa so:
01.
@echo off & setlocal 
02.
for /f "tokens=3" %%i in ('dir /-c D:') do set "B=%%i" 
03.
set "GB=%B:~,-9%" 
04.
if not defined GB ( 
05.
    echo weniger als 1 GB frei 
06.
) else ( 
07.
    echo mindestens %GB% GB frei 
08.
)
Grüße
bastla
Bitte warten ..
Mitglied: rubberman
08.05.2014, aktualisiert um 21:07 Uhr
Hallo Dominik,

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.:
01.
@echo off &setlocal 
02.
 
03.
set "line=12 Dir(s) 37.184.610.304 bytes free" 
04.
for /f "tokens=3" %%i in ("%line:.=%") do call :B2GiB %%i 
05.
echo %errorlevel:~0,-2%,%errorlevel:~-2% 
06.
pause 
07.
 
08.
goto :eof 
09.
 
10.
:B2GiB 
11.
setlocal EnableDelayedExpansion 
12.
set "B=%~1" 
13.
set "highPart=%B:~0,-6%" 
14.
set "lowPart=%B:~-6%" 
15.
set /a "KB = highPart / 1024 * 1000000, borrow = highPart %% 1024" 
16.
if %borrow% gtr 0 ( 
17.
  set "lowPart=%borrow%%lowPart%"" 
18.
) else ( 
19.
  for /l %%a in (1,1,5) do if "!lowPart:~0,1!" equ "0" set "lowPart=!lowPart:~1!" 
20.
21.
set /a "KB += lowPart / 1024, GB = KB / 1048576, HH = KB %% 1048576 * 100 / 1048576" 
22.
if %HH% lss 10 set "HH=0%HH%" 
23.
endlocal&exit /b %GB%%HH%
Versteht sich von selbst, dass man den Wert für die Variable line auch aus deiner Datei einlesen kann.
<"%HOSTNAME%.txt" set /p "line="
Grüße
rubberman

EDIT: DelayedExpansion vergessen
Bitte warten ..
Mitglied: ThomasM
08.05.2014 um 20:51 Uhr
Na siehste, mal wieder was dazu gelernt. ;)
Bitte warten ..
Mitglied: ThomasM
08.05.2014, aktualisiert um 20:59 Uhr
Zitat von bastla:
(BTW: Willkommen im Forum!)

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. ^^
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
gelöst Excel: Wenn Wert in Spalte A dann kopiere Zeile (8)

Frage von michi1983 zum Thema Microsoft Office ...

Microsoft Office
gelöst Excel: Wert aus mehreren Zeilen vergleichen (2)

Frage von Nicolaas zum Thema Microsoft Office ...

Batch & Shell
Batch bestimme Zeile einer vorherigen batch einfügen (9)

Frage von Frensche zum Thema Batch & Shell ...

Neue Wissensbeiträge
Sicherheit

Millionen Euro in den Sand gesetzt?

(3)

Information von transocean zum Thema Sicherheit ...

Sicherheit

How I hacked hundreds of companies through their helpdesk

Information von SeaStorm zum Thema Sicherheit ...

Erkennung und -Abwehr

Ccleaner-Angriff war nur auf große Unternehmen gemünzt

(10)

Information von Lochkartenstanzer zum Thema Erkennung und -Abwehr ...

Heiß diskutierte Inhalte
Humor (lol)
gelöst Freidach Beitrag (40)

Frage von Penny.Cilin zum Thema Humor (lol) ...

Firewall
gelöst Firewall Firmeneimsatz (22)

Frage von wiesi200 zum Thema Firewall ...

Multimedia & Zubehör
gelöst 8 GB USB Stick besitzt nur noch 4 MB Kapazität (13)

Frage von Gwahlers zum Thema Multimedia & Zubehör ...