backspace
Goto Top

Fsutil - in batchdatei einbinden

Hallo,

Sorry, ich schon wieder.

Komm leider wieder nicht weiter:

set fixed=%temp%\fixed.txt

for /f %%a in ('fsutil fsinfo drives') do fsutil fsinfo drivetype %%a |find "Eingebautes" >>%fixed%  

for /f %%b in ('fsutil fsinfo drivetype %%a |find "Eingebautes') do fsutil volume diskfree %%b >>%fixed%  

for /f "tokens=*" %%b in (fixed.txt) do wget -q "http:........"  

Mein Vorhaben:

mit fsutil sollen einmal die lokalen Laufwerke und die entsprechenden freien Speicher ausgelesen werden.

Da fsutil beides jeweils anscheinend nur einzeln auslesen kann, muß man die ausgelesenen Werte in eine Datei Zwischenspeichern und zum Schluß wieder richtig zusammenführen.

Ich mußte leider auf fsutil zurückgreifen, da ich seit neuem die Vorgabe habe, den freien Speicher in Byte anzeigen zu lassen, die Umrechnung des freien Speichers (über PHP mit 1024er Blockgröße) von Terrabyte/Gigabyte auf Byte wird leider zu ungenau.


Danke im Voraus !

Gruß

Backspace

Content-Key: 157149

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

Printed on: April 16, 2024 at 16:04 o'clock

Member: bastla
bastla Dec 16, 2010 at 22:02:25 (UTC)
Goto Top
Hallo backspace!

Wie wär's mit
for /f "tokens=1,4" %%a in ('"wmic logicaldisk get caption,description,freespace"^|findstr Festplatte') do echo %%a %%b
Grüße
bastla
Member: Backspace
Backspace Dec 17, 2010 at 09:26:02 (UTC)
Goto Top
Hallo bastla,

Danke funktionierte auf Anhieb.

Eine Frage noch:

wenn ich den Code mit "size" erweitere, werden mir auch die Gesamtkapazitäten angezeigt, die mathematische Umrechnung um den freien Speicher in Prozent zu erhalten wäre:

100% - [freespace / size * 100]


for /f "tokens=1,4" %%a in ('"wmic logicaldisk get caption,description,freespace,size"^|findstr Festplatte') do echo %%a %%b  

Kann man das auch mit in die Forschleife einfügen, sonst würde ich ja doppelte Ausgaben erhalten, also einmal nur Laufwerk und Frei(%) , und eine weitere Ausgabe nur mit Laufwerk und Frei(Byte), wenn ich noch eine zweite Forschleife erstelle.

Danke

Gruß

Backspace
Member: bastla
bastla Dec 17, 2010 at 14:19:26 (UTC)
Goto Top
Hallo Backspace!

Bedingt durch die Beschränkungen der CMD-Arithmetik (nur ganzzahlig, max 32-Bit-Werte) könntest Du das nur etwa so versuchen:
@echo off & setlocal enabledelayedexpansion
for /f "tokens=1,4,5" %%a in ('"wmic logicaldisk get caption,description,freespace,size"^|findstr Festplatte') do (  
    set Free=%%b
    set Size=%%c
    set /a Pct=!Free:~,-3!/!Size:~,-5!
    echo %%a %%b !Pct!
)
Den freien Speicher in Prozent erhältst Du übrigens mit
freespace / size * 100
- Deine Formel würde den Prozentsatz für den belegten Speicherplatz liefern.

Für die Berechnung im Batch wird mit auf 1.000 Byte abgerundeten Werten gerechnet, indem vom freien Speicherplatz die letzten 3 Stellen weggelassen werden und vom Gesamtspeicher die letzten 5 Stellen - entspricht dann also der Formel
freespace / (size / 100)

Grüße
bastla

P.S.: Was spricht eigentlich gegen die Verwendung von VBS (einen entsprechenden Ansatz hattest Du ja bereits)?
Member: Backspace
Backspace Dec 17, 2010 at 15:13:44 (UTC)
Goto Top
Hallo bastla,

das VBS mußte ich leider wieder aus der batch entfernen (Anweisung von Oben).


Zum obigen Code:

es kommt leider folgende Fehlermeldung:

Fehlender Operator
C: 63968415744 !Pct!
Fehlender Operator
D: 7050096640 !Pct!

Wie müßte es aussehn, wenn ich es mit dem..............DO wget -q "http:................." verbinden möchte ?

Danke

Gruß

Backspace
Member: bastla
bastla Dec 17, 2010 at 15:45:21 (UTC)
Goto Top
Hallo Backspace!

Ändere das "echo off" auf "echo on" und starte den Batch aus einem CMD-Fenster - dann siehst Du, welcher Wert nicht zugewiesen wird, und wenn Du dann noch die Ausgabe von
wmic logicaldisk get caption,description,freespace,size
analysierst, wirst Du hoffentlich feststellen können, welche "tokens" bei Deiner (leider nicht genannten) Windows-Version benötigt werden (unter XP SP3 funktioniert der von mir gepostete Batch) ...
Wie müßte es aussehn, wenn ich es mit dem..............DO wget -q "http:................." verbinden möchte ?
Die gesamte Klammer (= Zeilen 3 bis 6) wird für jedes Laufwerk einmal ausgeführt - daher einfach "wget ..." innerhalb der Klammer platzieren (analog zu Zeile 6).

Grüße
bastla
Member: Backspace
Backspace Dec 18, 2010 at 19:13:43 (UTC)
Goto Top
Hallo bastla,

möchte mich zuerst wieder für die tolle Hilfe bedanken.

Mein Arbeitsrechner an dem ich alles teste, hat leider ein Vista Betriebssystem, abgesehn davon muß das Batch für alle Winversionen funktionieren (Win Server2003/2008, XP Prof., Vista, Win7,....).

Könnte man das evtl. auch in dieser Art lösen, war ein Ansatz von mir, den ich leider auch nicht zu Ende bringen konnte ?

FOR /F "tokens=1,4" %%i IN ('"wmic logicaldisk get caption,description,size"^|findstr Lokale') DO SET "Size=%%i"  
FOR /F "tokens=1,4" %%k IN ('"wmic logicaldisk get caption,description,freespace"^|findstr Lokale') DO SET "Free=%%k"  

FREESPACE=100
FreeSpace=FREESPACE-(Free/Size*100)
let FreeSpace=$FREESPACE_in_Prozent - $......
.
.
.


Ich kann Deine o.g. Vorschläge erst wieder am Montag testen, wenn ich wieder in der Firma bin.

Danke

Gruß

Backspace
Member: bastla
bastla Dec 18, 2010 at 20:15:55 (UTC)
Goto Top
Hallo Backspace!

Abgesehen davon, dass unsere Interpretationen hinsichtlich der Prozentberechnung etwas differieren, solltest Du schon gesehen haben, dass arithmetische Berechnungen in CMD mit "set /a Variable=" durchgeführt werden.
Hinsichtlich der Verwendung zweier "wmic"-Abfragen: ist möglich (wenn auch für den angestrebten Zweck nicht in der von Dir dargestellten Form), aber ziemlich sinnlos ...
Ob die "wmic"-Ausgabe unter allen benötigten BS das selbe Ergebnis (zumindest hinsichtlich der "tokens") liefert, musst Du selbst testen.
Noch als Hinweis: Für die Verwendung von "wmic" sind Admin-Rechte erforderlich.

Grüße
bastla