Belegter sowie freier Speicherplatz ermitteln und vergleichen
Hallo zusammen,
ich möchte mittels einer Batch den belegten Speicherplatz auf Laufwerk A sowie den freien Speicherplatz auf Laufwerk B ermitteln
um dann festzustellen ob die Daten von A auf B Platz hätten.
Habe das einmal mit Bordmitteln und einmal mit Hilfe von psinfo gebastelt aber so wirklich gefällt mir das noch nicht.
Mit den fehlenden Kommastellen kann ich leben.
Aber lässt sich zum Beispiel das Kürzen oder Rechnen mit in das setzen der Variabeln mit einbeziehen sodass ich nicht dafür noch mal extra welche setzen muss?
Oder hat jemand einen ganz anderen Ansatz?
Danke und Grüße
Martin
ich möchte mittels einer Batch den belegten Speicherplatz auf Laufwerk A sowie den freien Speicherplatz auf Laufwerk B ermitteln
um dann festzustellen ob die Daten von A auf B Platz hätten.
Habe das einmal mit Bordmitteln und einmal mit Hilfe von psinfo gebastelt aber so wirklich gefällt mir das noch nicht.
Mit den fehlenden Kommastellen kann ich leben.
Aber lässt sich zum Beispiel das Kürzen oder Rechnen mit in das setzen der Variabeln mit einbeziehen sodass ich nicht dafür noch mal extra welche setzen muss?
Oder hat jemand einen ganz anderen Ansatz?
Danke und Grüße
Martin
@echo off & setlocal
cls
for /f "tokens=5 delims= " %%a in ('fsutil volume diskfree d: ^| find "Gesamtanz."') do set Z_Free=%%a
for /f "tokens=4 delims= " %%a in ('fsutil volume diskfree c: ^| find "Gesamtanzahl Bytes"') do set Q_Total=%%a
for /f "tokens=6 delims= " %%a in ('fsutil volume diskfree c: ^| find "Gesamtanzahl an freien Bytes"') do set Q_Free=%%a
set /a Q_Total1=%Q_Total:~0,-4%/1024*1000/1024/1024
set /a Q_Free1=%Q_Free:~0,-4%/1024*1000/1024/1024
set /a Z_Free1=%Z_Free:~0,-4%/1024*1000/1024/1024
set /a Q_Used=%Q_Total1%-%Q_Free1%
echo Speicherplatz benötigt: %Q_Used% GB
echo Speicherplatz verfügbar: %Z_Free1% GB
echo.
if %Q_Used% GEQ %Z_Free1% goto zuklein
goto ok
:zuklein
echo Ziel ist zu klein!
goto :EOF
:ok
echo Hat Platz!
@echo off & setlocal
cls
for /f "tokens=7" %%i in ('C:\programme\psinfo.exe -d volume 2^>nul ^|findstr /c:"D:"')do set "Z_Free=%%i"
for /f "tokens=5-7" %%i in ('C:\programme\psinfo.exe -d volume 2^>nul ^|findstr /c:"C:"')do (
set "Q_Total=%%i"
set "Q_Free=%%k"
)
set /a Z_Free1=%Z_Free:~0,-3%
set /a Q_Total1=%Q_Total:~0,-3%
set /a Q_Free1=%Q_Free:~0,-3%
set /a Q_Used=%Q_Total1%-%Q_Free1%
echo Speicherplatz benötigt: %Q_Used% GB
echo Speicherplatz verfügbar: %Z_Free1% GB
echo.
if %Q_Used% GEQ %Z_Free1% goto zuklein
goto ok
:zuklein
echo Ziel ist zu klein!
goto :EOF
:ok
echo Hat Platz!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 283380
Url: https://administrator.de/contentid/283380
Ausgedruckt am: 13.11.2024 um 00:11 Uhr
13 Kommentare
Neuester Kommentar
@echo off
for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -Command "&{$a = (gwmi Win32_LogicalDisk -Filter \"DeviceId ^= 'A:'\"); $b = (gwmi Win32_LogicalDisk -Filter \"DeviceId ^= 'B:'\"); $b.FreeSpace -gt ($a.Size - $a.FreeSpace)}"') DO @(if /i "%%a" == "True" echo Freier Speicherplatz auf B ist ausreichend )
Gruß jodel32
Kleiner Typo, sorry... ist oben korrigiert.
p.s. unter XP muss die Powershell nachinstalliert werden, Powershell ist ab Vista per Default installiert.
p.s. unter XP muss die Powershell nachinstalliert werden, Powershell ist ab Vista per Default installiert.
for /f "tokens=1,2 delims= " %%a in ('powershell.exe -ExecutionPolicy ByPass -Command "&{$a = (gwmi Win32_LogicalDisk -Filter \"DeviceId ^= 'A:'\"); $b = (gwmi Win32_LogicalDisk -Filter \"DeviceId ^= 'B:'\");$belegt=$a.Size - $a.FreeSpace;$free=$b.Freespace;\"$belegt $free\"}"') DO @(
echo Belegter Speicher von A %%a
echo Freier Speicher von B %%b
)
for /f "tokens=1,2 delims= " %%a in ('powershell.exe -ExecutionPolicy ByPass -Command "&{$a = (gwmi Win32_LogicalDisk -Filter \"DeviceId ^= 'A:'\"); $b = (gwmi Win32_LogicalDisk -Filter \"DeviceId ^= 'B:'\");$belegt=\"{0:F2}\" -f (($a.Size - $a.FreeSpace)/1MB);$free=\"{0:F2}\" -f ($b.Freespace / 1MB);\"$belegt $free\"}"') DO @(
echo Belegter Speicher von A %%aMB
echo Freier Speicher von B %%bMB
)
Zitat von @m.fessler:
Lässt sich das gut kombinieren (Prüfung + Info über die Größen) oder soll ich es einfach nacheinander (und somit 2x) abfragen?
Ja, lass ich dir aber mal als Knobelaufgabe, sollst davon ja was lernen und nicht nur kopieren Lässt sich das gut kombinieren (Prüfung + Info über die Größen) oder soll ich es einfach nacheinander (und somit 2x) abfragen?
Den Beitrag dann bitte noch auf gelöst setzen. Danke.
setlocal enabledelayedexpansion
for /f "tokens=4 delims= " %%a in ('fsutil volume diskfree c: ^| find "Gesamtanzahl Bytes"') do (
set Q_Total=%%a
set /a Q_Total=!Q_Total:~0,-4!/1024*1000/1024/1024
)
echo !Q_Total!
Zitat von @m.fessler:
Gleich mit dem ersten setzen der Variabel kürzen und rechnen geht nicht - oder?
Nein.Gleich mit dem ersten setzen der Variabel kürzen und rechnen geht nicht - oder?
Zitat von @114757:
Sei aber gewarnt die Batch kann hier nur mit Zahlen bis 2^31 rechnen !!! Also 2,147,483,647 (2GB)
Da die Zahl aber vor dem Rechenvorgang um 3 Stellen gekürzt wird ist somit das Limit praktisch 1,95TB - oder hab ich da nen Denkfehler?Sei aber gewarnt die Batch kann hier nur mit Zahlen bis 2^31 rechnen !!! Also 2,147,483,647 (2GB)