Windows-Befehlszeile ruft Speicherplatz in GB ab

12

Ich versuche, eine Batchdatei zu erstellen, um die Gesamtgröße und den freien Speicherplatz des Laufwerks C: \ der Server abzurufen (lokal ausgeführtes Skript). Ich brauche auch, dass die Ausgabe leicht lesbar ist, damit Bytes nicht funktionieren. Daher kann ich eine Befehlszeile verwenden, die eine temporäre .vbs-Datei erstellt.

Das Folgende scheint zu funktionieren, aber die Formatierung / Mathematik ist nicht korrekt.

setlocal
for /f "tokens=6" %a in ('fsutil volume diskfree C: ^| find "of bytes"') do set diskspace=%a
echo wsh.echo FormatNumber(cdbl(%diskspace%)/1024, 0) > %temp%.\tmp.vbs
for /f %a in ('cscript //nologo %temp%.\tmp.vbs') do set diskspace=%a
del %temp%.\tmp.vbs
echo For example %diskspace%

Die obigen Befehle zeigen auch nur freien Speicherplatz an ... Ich möchte auch die Gesamtgröße ... Ich frage mich, ob der folgende Befehl besser zum Abrufen der Informationen geeignet ist:

WMIC LOGICALDISK GET Name,Size,FreeSpace | find /i "C:"

Beachten Sie auch, dass dies direkt in eine Eingabeaufforderung kopiert / eingefügt werden kann (keine Batchdatei - erzwungene Anforderungen). Ich habe die "%%" bereits aus dem obigen Code entfernt.

Hinweis: Muss nativ auf Server 2003+ ausgeführt werden (daher ist Powershell nicht verfügbar, ebenso wie alle Dienstprogramme von Drittanbietern).

BondUniverse
quelle
Welche Version von Windows?
EBGreen
Server 2003+, nativ. Aktualisieren Sie meinen ursprünglichen Beitrag, um dies widerzuspiegeln.
BondUniverse

Antworten:

9

Unter der Klausel " Keine Batchdatei - erzwungene Anforderungen"cmd könnte der nächste Einzeiler helfen:

for /f "tokens=1-3" %a in ('WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FINDSTR /I /V "Name"') do @echo wsh.echo "%b" ^& " free=" ^& FormatNumber^(cdbl^(%a^)/1024/1024/1024, 2^)^& " GiB"^& " size=" ^& FormatNumber^(cdbl^(%c^)/1024/1024/1024, 2^)^& " GiB" > %temp%\tmp.vbs & @if not "%c"=="" @echo( & @cscript //nologo %temp%\tmp.vbs & del %temp%\tmp.vbs

Ausgabe :

==>for /f "tokens=1-3" %a in ('WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FIND
STR /I /V "Name"') do @echo wsh.echo "%b" ^& " free=" ^& FormatNumber^(cdbl^(%a^
)/1024/1024/1024, 2^)^& " GiB"^& " size=" ^& FormatNumber^(cdbl^(%c^)/1024/1024/
1024, 2^)^& " GiB" > %temp%\tmp.vbs & @if not "%c"=="" @echo( & @cscript //nolog
o %temp%\tmp.vbs & del %temp%\tmp.vbs

C: free=79,11 GiB size=111,45 GiB

D: free=929,47 GiB size=931,51 GiB

==>
JosefZ
quelle
11

Mir ist klar, dass Sie gerade als VBS suchen, aber PowerShell kann dies sehr einfach tun:

$disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'" | Select-Object Size, FreeSpace

Write-Host ("{0}GB total" -f [math]::truncate($disk.Size / 1GB))
Write-Host ("{0}GB free" -f [math]::truncate($disk.FreeSpace / 1GB))

In der ersten Zeile werden die Festplatteninformationen von WMI abgerufen (in diesem Beispiel nur C:), und es werden nur die Größen für freien Speicherplatz und Gesamtgröße ausgewählt.

Schreiben Sie in den nächsten beiden Zeilen die Größen für freien Speicherplatz und Gesamtgröße in die Konsole, formatiert in GB, wobei die Brüche abgeschnitten sind.

Beispielausgabe (wie sie ist):

223GB total
125GB free
Ƭᴇcʜιᴇ007
quelle
1
Ich habe vergessen, eine Notiz darüber zu machen ... Muss auf Server 2003+ nativ funktionieren (da Powershell 2003 nicht nativ ist, kann es nicht verwendet werden). Mit Powershell wäre es auf jeden Fall einfacher gewesen!
BondUniverse
3

In einer Batchdatei können Sie die Festplattengröße einer angegebenen Festplatte in GB mithilfe eines DiskPart-Skripts ermitteln. In diesem Beispiel setze ich den spezifischen Festplattenindex gemäß seinem Modellnamen (vorausgesetzt, es gibt nur einen ähnlichen im Computer). Ändern Sie die Zeichenfolge " SATA Disk " entsprechend dem Modell Ihres Laufwerks. Sie können den Modellnamen abrufen, indem Sie den Befehl " wmic diskdrive get Model, Index " in cmd ausführen .

Natürlich können Sie im Befehl wmic eine andere Eigenschaft der Festplatte verwenden - geben Sie wmic diskdrive get /? um eine Liste aller Festplatteneigenschaften zu erhalten, die Sie verwenden können.

for /f %%I in ('wmic diskdrive get Model^, Index ^| find "SATA Disk"') do set DISK_Index=%%I

if not exist %~dp0Disk_Size.script (echo list disk > %~dp0Disk_Size.script)
@echo off
FOR /F "tokens=4 delims= " %%J in ('diskpart /s %~dp0Disk_Size.script ^| find "Disk %DISK_Index%"') do set DISK_SIZE=%%J
IF %ERRORLEVEL% EQU 1 (echo No Data was processed, cannot get DISK_SIZE)

echo DISK_SIZE is %DISK_SIZE% GB
Eric
quelle
3

Wenn Sie nur überprüfen müssen, ob auf dem Laufwerk genügend freier Speicherplatz vorhanden ist (um beispielsweise etwas zu installieren oder zu kopieren), können Sie die wmic-Abfrage wie folgt versuchen:

wmic LogicalDisk where "DeviceID='c:' and FreeSpace > 10737418240" get DeviceID 2>&1 ^ | find /i "c:" >nul || (echo not enough space&exit 1)

Dadurch wird die Ausführung von Batchdateien unterbrochen, wenn auf C weniger als 10 GB frei sind:

Anilech
quelle
2

Teilen Sie durch 1024, um Kibyte zu erhalten (2 ^ 10). Teilen Sie durch 1024 x 1024, um Mibytes (2 ^ 20) zu erhalten. Teilen Sie durch 1024 x 1024 x 1024, um Gibytes (2 ^ 30) zu erhalten.

Windows nennt diese Einheiten aus historischen Gründen Kilobyte, Megabyte und Gigabyte. Ich denke mein Gehäuse ist richtig.

Also ändere deine Summen.

auslösen
quelle