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, 6486 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
Off Topic

"Ich habe nichts zu verbergen"

(2)

Erfahrungsbericht von FA-jka zum Thema Off Topic ...

Ähnliche Inhalte
Microsoft Office
Excel Nachfrage: Datum aus Spalte ausgeben (2)

Frage von PronMaster zum Thema Microsoft Office ...

Batch & Shell
gelöst Powershell - 2 Arrays vergleichen und gleiche Einträge verbinden (6)

Frage von internet2107 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Linux Netzwerk
gelöst DHCP vergibt keine Adressen (31)

Frage von Maik82 zum Thema Linux Netzwerk ...

Exchange Server
gelöst Bestehende eMails autoamatisch weiterleiten (22)

Frage von metal-shot zum Thema Exchange Server ...

Apache Server
gelöst Lets Encrypt SSL mit Apache2 (20)

Frage von banane31 zum Thema Apache Server ...

Switche und Hubs
LAG zwischen SG300-Switches macht Probleme. Wer weiß Rat? (20)

Frage von White-Rabbit2 zum Thema Switche und Hubs ...