Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 2223 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...