crazyhoesl
Goto Top

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

Content-Key: 75847

Url: https://administrator.de/contentid/75847

Printed on: April 19, 2024 at 20:04 o'clock

Member: miniversum
miniversum Dec 12, 2007 at 18:01:51 (UTC)
Goto Top
Versuchs mal Damit:
@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
Member: crazyhoesl
crazyhoesl Dec 12, 2007 at 21:54:04 (UTC)
Goto Top
Vielen Dank! Genau das habe ich gebraucht!
Member: crazyhoesl
crazyhoesl Dec 12, 2007 at 22:25:56 (UTC)
Goto Top
Jetzt habe ich doch ein Problem face-wink

Die Zahl die die Batch ausgibt ist nicht der belegte Speicher, sondern der freie Speicherplatz.

Jetzt gebe ich zu das es mit dem "dir" Befehl nicht recht einfach ist den belegten Speicherplatz zu bekommen, da er nur für den jeweiligen Pfad die belegten Bytes ausgibt. Also um zwei Festplatten zu vergleichen ist dieser Befehl wohl nicht zu empfehlen.

Aber in meinem Fall haben beide Laufwerke keinerlei Unterordner. Das ist jetzt wohl Glück, aber wie kann ich beeinflussen dass er die belegten Bytes nimmt?

Vielen Dank!
Member: crazyhoesl
crazyhoesl Dec 12, 2007 at 23:09:33 (UTC)
Goto Top
Ich denke ich habe es mir selber fast schon gelöst:

@echo off
set lw1=c:
set lw2=z:

FOR /F "tokens=3 delims= " %%i in ('dir %lw1%^|find "Datei"') do set lw1size=%%i  
FOR /F "tokens=3 delims= " %%i in ('dir %lw2%^|find "Datei"') do set lw2size=%%i  

set lw1size=%lw1size:.=%
set lw2size=%lw2size:.=%

set /a lw1size=%lw1size%/1073741824
set /a lw2size=%lw2size%/1073741824

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.

Ich habe nur ein Problem, die Rechnung funktioniert nicht... Kann es daran liegen dass die Zahl zu lang/groß ist die berechnet werden muss?

Danke, crazyhoesl
Mitglied: 58502
58502 Dec 12, 2007 at 23:35:43 (UTC)
Goto Top
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 face-smile

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:
Member: Biber
Biber Dec 13, 2007 at 06:16:40 (UTC)
Goto Top
Moin crazyhoesl,

Ich habe nur ein Problem, die Rechnung funktioniert nicht...
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
Member: bastla
bastla Dec 13, 2007 at 10:13:19 (UTC)
Goto Top
Hallo crazyhoesl!

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:
@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%
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"):
@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%
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
Member: crazyhoesl
crazyhoesl Dec 13, 2007 at 11:26:40 (UTC)
Goto Top
Super!

Vielen Dank wie immer für euer Unterstützung!!!!

crazyhoesl