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
GELÖST

Verzeichnisgrößen vergleichen und Differenz ausgeben

Frage Entwicklung Batch & Shell

Mitglied: crazyhoesl

crazyhoesl (Level 1) - Jetzt verbinden

12.12.2007, aktualisiert 13.12.2007, 6471 Aufrufe, 8 Kommentare

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
Mitglied: miniversum
12.12.2007 um 19:01 Uhr
Versuchs mal Damit:
01.
@echo off 
02.
set lw1=R: 
03.
set lw2=T: 
04.
 
05.
FOR /F "tokens=3 delims= " %%i in ('dir %lw1%') do set lw1size=%%i 
06.
FOR /F "tokens=3 delims= " %%i in ('dir %lw2%') do set lw2size=%%i 
07.
set lw1size=%lw1size:.=% 
08.
set lw2size=%lw2size:.=% 
09.
set lw1size=%lw1size:~0,-6% 
10.
set lw2size=%lw2size:~0,-6% 
11.
 
12.
set /a dif=%lw2size%-%lw1size% 
13.
 
14.
echo Platte %lw1% hat %lw1size% GByte belegt. 
15.
echo Platte %lw2% hat %lw2size% GByte belegt. 
16.
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
Bitte warten ..
Mitglied: crazyhoesl
12.12.2007 um 22:54 Uhr
Vielen Dank! Genau das habe ich gebraucht!
Bitte warten ..
Mitglied: crazyhoesl
12.12.2007 um 23:25 Uhr
Jetzt habe ich doch ein Problem

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!
Bitte warten ..
Mitglied: crazyhoesl
13.12.2007 um 00:09 Uhr
Ich denke ich habe es mir selber fast schon gelöst:

01.
@echo off 
02.
set lw1=c: 
03.
set lw2=z: 
04.
 
05.
FOR /F "tokens=3 delims= " %%i in ('dir %lw1%^|find "Datei"') do set lw1size=%%i 
06.
FOR /F "tokens=3 delims= " %%i in ('dir %lw2%^|find "Datei"') do set lw2size=%%i 
07.
 
08.
set lw1size=%lw1size:.=% 
09.
set lw2size=%lw2size:.=% 
10.
 
11.
set /a lw1size=%lw1size%/1073741824 
12.
set /a lw2size=%lw2size%/1073741824 
13.
 
14.
set /a dif=%lw2size%-%lw1size% 
15.
 
16.
echo Platte %lw1% hat %lw1size% GByte belegt. 
17.
echo Platte %lw2% hat %lw2size% GByte belegt. 
18.
echo Die Differenz ist %dif% GByte. 
19.
 
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
Bitte warten ..
Mitglied: 58502
13.12.2007 um 00:35 Uhr
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:
01.
 
02.
::------snipp Dirsize.cmd (Parameter1 Verzeichnisname [opt Par2: /R wie Rekursiv] /opt. par3 =Ebenen 
03.
@echo off & setlocal & Set DIRCMD= 
04.
IF /i [%2]==[/R] for /R "%~1" %%a in (.) do @%0 "%%a" %3 
05.
if not [%2]==[] Set /a "Level=%2+2" 
06.
if defined level for /f "delims= tokens=1,%level%" %%i in ("%~1") do if not [%%j]==[] goto :eof 
07.
If exist "%1" (    
08.
  for /f "tokens=3" %%c in ('dir "%~1" /s ^2^>nul^| findstr /c:"Datei(en)" ') do set DirSize=%%c 
09.
10.
set "space20=____________________" 
11.
if defined DirSize set "Dirsize=%space20%%Dirsize%" 
12.
if defined DirSize echo %DirSize:~-15%    %~f1

Edit da isse:
Bitte warten ..
Mitglied: Biber
13.12.2007 um 07:16 Uhr
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:
01.
>set /a 1073741824/1073741824 
02.
03.
>set /a 1001073741824/1073741824 
04.
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
Bitte warten ..
Mitglied: bastla
13.12.2007 um 11:13 Uhr
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:
01.
@echo off & setlocal 
02.
set "D=%temp%\Difference.vbs" 
03.
echo Set fso=CreateObject("Scripting.FileSystemObject"):WScript.Echo Int((fso.GetFolder("T:\").Size-fso.GetFolder("R:\").Size)/1024/1024/1024)>%D% 
04.
for /f %%i in ('cscript //nologo %D%') do set Diff=%%i 
05.
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"):
01.
@echo off & setlocal 
02.
set "D=%temp%\Difference.vbs" 
03.
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% 
04.
for /f %%i in ('cscript //nologo %D%') do set Diff=%%i 
05.
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
Bitte warten ..
Mitglied: crazyhoesl
13.12.2007 um 12:26 Uhr
Super!

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

crazyhoesl
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell - Dateien aus verschiedenen Arrays - Attribute vergleichen (5)

Frage von Giffas zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch ausgabe zeilenweise stat spaltenweise ausgeben (4)

Frage von sugram zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (12)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...