Batch für LW-Größe

R

reaper2k11

Gast
Ich möchte eine Batch für die Ermittlung der belegung eines Laufwerks erstellen. Mit einer IF-Abfrage soll ermittelt werden, ob die Belegung größer als 90 Prozent ist und bei Erfüllung eine TXT Datei kopieren.

Bis auf die Auslesung der Belegung ist bei mir alles klar.

Ideen?
 
fsutil volume diskfree c:
 
Schonmal ein guter Ansatz. Gibt es noch eine einzelne Ausgabe, damit ich diese vergleichen könnte?
So erhalte ich nämlich drei Zeilen mit Text und Zahlen
 
wie wäre es mit
fsutil volume diskfree c: | FINDSTR freien > freierplatz.log

das gibt zb. nur die zeile mit dem freien platz aus und packt die ausgabe gleich in eine logdatei
 
ich check das nicht :freak:
Gerade mehrere konstellationen mit findstr versucht.
Er gibt mir entweder alle drei Zeilen aus, oder wenn es funktioniert - die richtige Zeile mit Text und Zahlen.
Ich würde sowas eher in eine Variable ausgeben wollen.


mein anderer Versuch funktioniert ebenfalls nicht:
Code:
@echo off

for /f "tokens=3" %%i in ('dir D: /-c') do set FrSp=%%i

if %FrSp% LSS 225044899430 (
copy NUL "C:\Users\Administrator\Desktop\###!!!-WENIG_SPEICHERPLATZ_AUF_D-!!!###.LOG"
) else (
pause
)

Die 225044899430 sind 20 Prozent von der 1,5 TB Platte -> in Bytes angebeben
 
Zuletzt bearbeitet:
Code:
Echo OFF &Setlocal

For /F "Skip=2 Tokens=4 Delims=: " %%a IN ('fsutil volume diskfree d:') DO Set Rest=%%a
If %Rest% LSS 225044899430 Echo ###!!!-WENIG_SPEICHERPLATZ_AUF_D-!!!###>>"C:\Users\Administrator\Desktop\###!!!-WENIG_SPEICHERPLATZ_AUF_D-!!!###.LOG"

Etwas ins Nirwana zu kopieren, hat wenig Sinn. ;)
 
Ich kopier doch nichts ins Nirvana. Oder doch?
Das Verzeichnis im Profil existiert.

Deine Variante funktioniert bei mir ebenso nicht :)
 
Zuletzt bearbeitet:
"Copy Nul" endet im Nirvana.

Ich würde mal erst in der CMD testen, was überhaupt der Befehl ausgibt.

fsutil volume diskfree d:
 
copy NUL funktioniert :)
Er legt eine leere Datei an und füllt sie mit dem Echo

ich weiß echt nicht mehr was da zu machen ist.
Zeile 1-3 funktionieren ja. Denn die Variable erhäklt dann den Wert '46104473600' aus.
Dachte anfangs, weil man ja strings als zahl nicht vergleichen kann, deshalb habe ich eine andere Variable mit einer anderen getestet. Funktioniert auch nicht.
 
liegt an IF, hier können nur Zahlen von 0 bis 255 verwendet werden.
 
Hm ich könnte höchstens den Variablenwert und Vergleichswert "kürzen". Aber dann erfolgt keine Umrechnung in 1024 sondern quasi 1000, was von Bytes nach GB ziemlich viel Ungenauigkeit reinbringt.

Kann man die Batch auch dividieren lassen?

So funktioniert das nun :)
Code:
Echo OFF & Setlocal

set zwpro=225044899430

For /F "Skip=2 Tokens=4 Delims=: " %%a IN ('fsutil volume diskfree d:') DO Set Rest=%%a
set Rest2=%Rest:~0,-6%
set zwpro2=%zwpro:~0,-6%


If %Rest2% LSS %zwpro2% Echo ###!!!-WENIG_SPEICHERPLATZ_AUF_D-!!!###>>"D:\test\test.LOG"

pause


Gibts noch ne Möglichkeit, dass ich aus der Gesamtgröße zwanzig Prozent automatisch ermittle / errechne ?
klar, könnte ich die 20 Prozent in Bytes oben in die Variable angeben, doch schöner wäre es doch, wenn ich das in der Batch berechnen könnte.

Denn es könnte mal vorkommen, dass ich HDD'S durch größere ersetze.
 
Zuletzt bearbeitet:
cool, funktioniert wunderbar.

Eine letzte Frage noch :)
Ich möchte die zweite Zeile ausgeben, und zwar den Integer-Wert

C:\Users\Administrator>fsutil volume diskfree C:
Gesamtanzahl an freien Bytes : 25861304320
Gesamtanzahl Bytes : 63915945984
Gesamtanz. verfügbarer Bytes : 25861304320

Das Dick-Markierte soll es sein.
Wie kann ich den Code umbauen,
Code:
For /F "Skip=2 Tokens=4 Delims=: " %%a IN ('fsutil volume diskfree c:') DO Set Rest=%%a
damit er in die zweite Zeile springt?
 
Code:
For /F "Tokens=4 Delims=: " %%a IN ('fsutil volume diskfree c: ^|Findstr "Gesamtanzahl an" ') DO Set Rest=%%a
 
Vielen Dank :)
Hatte es zuerst mit | find "Gesamtanzahl Bytes" versucht, aber dann gibt er nicht nur ab dem Doppelpunkt sondern den Teyxt mit Zahl aus

Darf ich mal fragen was das Skip bedeutet? Token und Delims verstehe ich.

EDIT:
Müssten die Token nicht zwei und Findstr "Gesamtanzahl Bytes" sein?
Code:
For /F "Tokens=2 Delims=: " %%a IN ('fsutil volume diskfree c: ^|Findstr "Gesamtanzahl Bytes" ') DO Set Gesamt=%%a

Ich brauche diese Zeile:
Gesamtanzahl Bytes : 63915945984


Mist, dachte dass es funktioniert. Ich hab nochmal alles durchgeschaut, doch ich finde den Fehler (mal wieder) nicht ._.
Code:
echo OFF & Setlocal

set pfad1=C:\Users\Administrator\Desktop\

For /F "Skip=2 Tokens=4 Delims=: " %%a IN ('fsutil volume diskfree c:') DO Set Frei=%%a
For /F "Tokens=4 Delims=: " %%a IN ('fsutil volume diskfree c: ^|Findstr "Gesamtanzahl Bytes"
') DO Set Gesamt=%%a

set Frei=%Frei:~0,-6%
set Gesamt=%Gesamt:~0,-6%
set /a zehnprozc = %Gesamt%/100*10

If %Frei% LSS %zehnprozc% echo WENIG_SPEICHERPLATZ_AUF_C>>"%pfad1%\###!!!-SPEICHERPROBLEM_AUF_C-!!!###.LOG"




For /F "Skip=2 Tokens=4 Delims=: " %%a IN ('fsutil volume diskfree d:') DO Set Frei=%%a
For /F "Tokens=4 Delims=: " %%a IN ('fsutil volume diskfree d: ^|Findstr "Gesamtanzahl Bytes"
') DO Set Gesamt=%%a

set Frei=%Frei:~0,-6%
set Gesamt=%Gesamt:~0,-6%
set /a zwprozd = %Gesamt%/100*20

If %Frei% LSS %zwprozd% echo WENIG_SPEICHERPLATZ_AUF_D>>"%pfad1%\###!!!-SPEICHERPROBLEM_AUF_D-!!!###.LOG"

pause
 
Zuletzt bearbeitet:
Ah Danke :)
Aber da hakts immer noch ein bisschen.
Geb dir mal mit

echo %Frei%
echo %Gesamt%

die Inhalte aus. beide Variablen haben den selben Wert. GLaube das mit findstr greift noch nicht.
 
Code:
#!/usr/bin/perl
use strict;use warnings;use Filesys::DfPortable;
my $hdd_c  = dfportable("c:\\");
if ($hdd_c->{per} >= 20) { open (TXT, ">C:\\Users\\USERNAME\\Desktop\\###!!!-SPEICHERPROBLEM_AUF_C-!!!###.txt"); close TXT;}

In der if 20 durch deine gewünsche Prozent-Zahl ersetzen.
Im Pfad deinen Usernamen anpassen (und ggbfs. den Namen der Datei).
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben