Verzeichnisgrößen vergleichen und Differenz ausgeben
Hallo,
ich möchte was ganz simples an dem ich aber im Moment verzweifle..
Ich möchte eine Batch die mir von 2 Laufwerken die Differenz des belegten Speicherplatzes anzeigt,
also z.b.
Platte R: hat 400GB belegt
Platte T: hat 750GB belegt.
jetzt ist die Differenz und zugleich das Ergebnis das ich mir wünsche 250GB.
Eine Information kann noch wichtig sein: Platte R: kann NIE größer sein als Platte T:, man kann also immer T-R rechnen.
Hat jemand eine Idee?
Viele Grüße,
crazyhoesl
ich möchte was ganz simples an dem ich aber im Moment verzweifle..
Ich möchte eine Batch die mir von 2 Laufwerken die Differenz des belegten Speicherplatzes anzeigt,
also z.b.
Platte R: hat 400GB belegt
Platte T: hat 750GB belegt.
jetzt ist die Differenz und zugleich das Ergebnis das ich mir wünsche 250GB.
Eine Information kann noch wichtig sein: Platte R: kann NIE größer sein als Platte T:, man kann also immer T-R rechnen.
Hat jemand eine Idee?
Viele Grüße,
crazyhoesl
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 75847
Url: https://administrator.de/contentid/75847
Ausgedruckt am: 25.11.2024 um 11:11 Uhr
8 Kommentare
Neuester Kommentar
Versuchs mal Damit:
Die umrechnung vom Byte in GByte ist hier allerdings der einfachheit halber /1000000 (die letzten 6 Stellen abgeschnitten).
miniversum
@echo off
set lw1=R:
set lw2=T:
FOR /F "tokens=3 delims= " %%i in ('dir %lw1%') do set lw1size=%%i
FOR /F "tokens=3 delims= " %%i in ('dir %lw2%') do set lw2size=%%i
set lw1size=%lw1size:.=%
set lw2size=%lw2size:.=%
set lw1size=%lw1size:~0,-6%
set lw2size=%lw2size:~0,-6%
set /a dif=%lw2size%-%lw1size%
echo Platte %lw1% hat %lw1size% GByte belegt.
echo Platte %lw2% hat %lw2size% GByte belegt.
echo Die Differenz ist %dif% GByte.
Die umrechnung vom Byte in GByte ist hier allerdings der einfachheit halber /1000000 (die letzten 6 Stellen abgeschnitten).
miniversum
Das klappt so nicht, er zählt nämlich nur die Dateien, die Verzeichnisse nicht. Wenn im Root des Laufwerks keine Dateien vorhanden sind, ist lwxsize=0
Die etwas kompliziertere Version, die wahrscheinlich hier aus dem Forum stammt:
Edit da isse:
Die etwas kompliziertere Version, die wahrscheinlich hier aus dem Forum stammt:
::------snipp Dirsize.cmd (Parameter1 Verzeichnisname [opt Par2: /R wie Rekursiv] /opt. par3 =Ebenen
@echo off & setlocal & Set DIRCMD=
IF /i [%2]==[/R] for /R "%~1" %%a in (.) do @%0 "%%a" %3
if not [%2]== Set /a "Level=%2+2"
if defined level for /f "delims= tokens=1,%level%" %%i in ("%~1") do if not [%%j]== goto :eof
If exist "%1" (
for /f "tokens=3" %%c in ('dir "%~1" /s ^2^>nul^| findstr /c:"Datei(en)" ') do set DirSize=%%c
)
set "space20=____________________"
if defined DirSize set "Dirsize=%space20%%Dirsize%"
if defined DirSize echo %DirSize:~-15% %~f1
Edit da isse:
Moin crazyhoesl,
Jepp, diese Vermutung ist richtig, wie Dir ein kurzer Test am CMD-Prompt zeigen würde:
Bedeutet, bei den heutzutage üblichen MediaMarkt-Einsteiger-Plattengrößen kommst Du mit der Ausgabe des normalen DIR-Befehls (die immer in Byte ist) nicht weiter, wenn Du "rechnen" willst.
Du musst also ein Utility verwenden, dass die die Größe in MByte/GByte ausgibt.
Irgendeins von den vielen DirSize/DiskUse/DU/DirUsage-Freeware-Utilities.
Grüße
Biber
Ich habe nur ein Problem, die Rechnung funktioniert nicht...
Kann es daran liegen dass die Zahl zu lang/groß ist die berechnet werden muss?
Kann es daran liegen dass die Zahl zu lang/groß ist die berechnet werden muss?
Jepp, diese Vermutung ist richtig, wie Dir ein kurzer Test am CMD-Prompt zeigen würde:
>set /a 1073741824/1073741824
1
>set /a 1001073741824/1073741824
Ungültige Zahl. Zahlen sind begrenzt auf eine Genauigkeit von 32 Bits.
Bedeutet, bei den heutzutage üblichen MediaMarkt-Einsteiger-Plattengrößen kommst Du mit der Ausgabe des normalen DIR-Befehls (die immer in Byte ist) nicht weiter, wenn Du "rechnen" willst.
Du musst also ein Utility verwenden, dass die die Größe in MByte/GByte ausgibt.
Irgendeins von den vielen DirSize/DiskUse/DU/DirUsage-Freeware-Utilities.
Grüße
Biber
Hallo crazyhoesl!
Zur Genauigkeit: Das Ergebnis wird immer auf eine ganze Zahl abgerundet ausgegeben (Dezimalstellen werden einfach weg gelassen). Berücksichtigt wird die Gesamtgröße der Dateien und Ordner.
Alternativ dazu (und eigentlich die exakte Umsetzung Deiner Anforderung "Differenz des belegten Speicherplatzes"):
Der belegte Speicherplatz wird hier ermittelt: (Gesamtkapazität der Partition - freier Speicher der Partition). Die Rundung des Ergebnisses erfolgt wie oben angegeben.
Grüße
bastla
Du musst also ein Utility verwenden, dass die die Größe in MByte/GByte ausgibt.
Irgendeins von den vielen DirSize/DiskUse/DU/DirUsage-Freeware-Utilities.
... oder ein wenig VBS:Irgendeins von den vielen DirSize/DiskUse/DU/DirUsage-Freeware-Utilities.
@echo off & setlocal
set "D=%temp%\Difference.vbs"
echo Set fso=CreateObject("Scripting.FileSystemObject"):WScript.Echo Int((fso.GetFolder("T:\").Size-fso.GetFolder("R:\").Size)/1024/1024/1024)>%D%
for /f %%i in ('cscript //nologo %D%') do set Diff=%%i
echo %Diff%
Alternativ dazu (und eigentlich die exakte Umsetzung Deiner Anforderung "Differenz des belegten Speicherplatzes"):
@echo off & setlocal
set "D=%temp%\Difference.vbs"
echo Set fso=CreateObject("Scripting.FileSystemObject"):WScript.Echo Int(((fso.GetDrive("T").TotalSize-fso.GetDrive("T").FreeSpace)-(fso.GetDrive("R").TotalSize-fso.GetDrive("R").FreeSpace))/1024/1024/1024)>%D%
for /f %%i in ('cscript //nologo %D%') do set Diff=%%i
echo %Diff%
Grüße
bastla