Ich habe folgende Batch erstellt, um Platzproblemen auf diversen PCs vorzubeugen.
Im Taskplaner läuft der Job täglich (oder öfter), und informiert mit einem Zusatztool per EMail oder ab Win7 per Message Box, ob ein Festplattenlimit erreicht wurde.
Wenn keine Limits überschritten worden sind, wird man nicht mit Informationen vollgemüllt.
Klar ist, man kann das auch über die Windows Ereignisse machen, aber ich wollte eine sehr vereinfachte variable Variante.
Mit meinen begrentzten Mitteln habe ich also unten stehendes Konstrukt gescribbelt, ...Teile sind aus dem Internet zusammengesucht.
Die Cracks schlagen bestimmt die Hände über den Kopf zusammen. ABER es funktioniert
Vielleicht hat jemand Lust das zu optimieren
Z.B. kann man wahrscheinlich besser mit Schleifen arbeiten, anstatt mit Knoten im Kopf so viele Sprungmarken zu setzen.
Das ist nämlich auch der Grund, warum ich nicht das ganze Alphabet abfrage
Statt der Abfrage des Speichers mit "wmic logicaldisk" gibt es noch die "dir LW:\ /-C" Variante. Hier musste ich allerdings feststellen, dass der Speicherplatz unter 10GB nicht richtig verglichen wurde. Das hängt wohl an den unterschiedlichen Formaten der Variablen.
Wer hier dissen will kann das für sein Ego tun.... bringt aber nix
Alles Gute!
@echo off SETLOCAL ENABLEDELAYEDEXPANSION rem 09.05.2018 rem -Getestet unter Win10 rem ----------------------------------------------------------------------------------- rem GERAETENAME set Server=PC002 rem ----------------------------------------------------------------------------------- rem LAUFWERK-LIMITS ABFRAGEN in MB (Nicht zu pruefende Laufwerke mit AUS kennzeichnen). rem HINT: "Dir C:" Befehl unter DOS eingeben und an letzter Zeile (Bytes frei) orientieren. rem Eingabe der Variable OHNE Trennzeichen. set Limit_C=500000 set Limit_D=3000 set Limit_E=AUS set Limit_F=AUS rem ----------------------------------------------------------------------------------- rem ----------------------------------------------------------------------------------- rem ERRORLOG set log=C:\Temp\Festplattenkontolle_%server%.txt rem ----------------------------------------------------------------------------------- rem MAIL BY ERROR (AN/AUS) set mailbyerror=AUS set mailprg="c:\Batch\Blat\Full\blat.exe" set mailsrv=exchange set [email protected] set sender=%Server%[email protected] set betreff="Fehler bei Festplattenueberpruefung %server%" rem ODER PER MESSAGE-BOX AUF DEM BILDSCHIRM set msgbyerror=AN set angemeldeteruser=ibims rem ----------------------------------------------------------------------------------- rem INFO: rem ----------------------------------------------------------------------------------- rem PARAMETER: rem LEQ = Weniger als angegebener Wert (limit überschritten) rem GTR = Höher als angegebener Wert (limit noch nicht erreicht) rem ----------------------------------------------------------------------------------- rem Das MailProgramm BLAT muss vorhanden sein fuer den EMailversand. rem ----------------------------------------------------------------------------------- rem ################################################################################### rem ----------------------------------------------------------------------------------- rem AB HIER NICHTS MEHR AENDERN rem ----------------------------------------------------------------------------------- cls md C:\TEMP 2>nul echo j| del %log% 2>nul echo. echo ---------------------------------------------------- echo. echo Pruefen der Festplattenkapazitaet von echo. echo Geraet = %server% echo. echo ---------------------------------------------------- echo. :no0 FOR /f "usebackq delims== tokens=2" %%x IN (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) DO SET "Festplattenplatz=%%x" rem !Festplattenplatz:~0,-7! = Kuerzen der angezeigten Bytes um 6 Stellen, also auf MB Ebene SET Festplattenplatz=!Festplattenplatz:~0,-7! if %Festplattenplatz% GTR %Limit_C% goto no1 goto fehler_1C :fehler_1C echo Laufwerk C: = ACHTUNG - Limit erreicht - SOLL = %Limit_C% MegaBytes FOR /f "usebackq delims== tokens=2" %%x IN (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) DO SET "Festplattenplatz=%%x" SET Festplattenplatz=!Festplattenplatz:~0,-7! echo " IST = %Festplattenplatz% MegaBytes Free" echo. >%log% echo Laufwerk C: = ACHTUNG - Limit erreicht - SOLL = %Limit_C% MegaBytes >>%log% echo " IST = %Festplattenplatz% MegaBytes Free" >>%log% echo. echo. >>%log% goto no11 :no1 echo Laufwerk C: = OK - SOLL = %Limit_C% MegaBytes echo " IST = %Festplattenplatz% MegaBytes Free" echo. :no11 if "%Limit_D%"=="AUS" goto no22 if not exist D:\nul goto fehler_2D FOR /f "usebackq delims== tokens=2" %%x IN (`wmic logicaldisk where "DeviceID='D:'" get FreeSpace /format:value`) DO SET "Festplattenplatz=%%x" SET Festplattenplatz=!Festplattenplatz:~0,-7! if %Festplattenplatz% GTR %Limit_D% goto no2 goto fehler_1D :fehler_1D echo Laufwerk D: = ACHTUNG - Limit erreicht - SOLL = %Limit_D% MegaBytes FOR /f "usebackq delims== tokens=2" %%x IN (`wmic logicaldisk where "DeviceID='D:'" get FreeSpace /format:value`) DO SET "Festplattenplatz=%%x" SET Festplattenplatz=!Festplattenplatz:~0,-7! echo " IST = %Festplattenplatz% MegaBytes Free" echo Laufwerk D: = ACHTUNG - Limit erreicht - SOLL = %Limit_D% MegaBytes >>%log% echo " IST = %Festplattenplatz% MegaBytes Free" >>%log% echo. echo. >>%log% goto no22 :no2 echo Laufwerk D: = OK - SOLL = %Limit_D% MegaBytes echo " IST = %Festplattenplatz% MegaBytes Free" echo. :no22 if "%Limit_E%"=="AUS" goto no33 if not exist E:\nul goto fehler_2E FOR /f "usebackq delims== tokens=2" %%x IN (`wmic logicaldisk where "DeviceID='E:'" get FreeSpace /format:value`) DO SET "Festplattenplatz=%%x" SET Festplattenplatz=!Festplattenplatz:~0,-7! if %Festplattenplatz% GTR %Limit_E% goto no3 goto fehler_1E :fehler_1E echo Laufwerk E: = ACHTUNG - Limit erreicht - SOLL = %Limit_E% MegaBytes FOR /f "usebackq delims== tokens=2" %%x IN (`wmic logicaldisk where "DeviceID='E:'" get FreeSpace /format:value`) DO SET "Festplattenplatz=%%x" SET Festplattenplatz=!Festplattenplatz:~0,-7! echo " IST = %Festplattenplatz% MegaBytes Free" echo Laufwerk E: = ACHTUNG - Limit erreicht - SOLL = %Limit_E% MegaBytes >>%log% echo " IST = %Festplattenplatz% MegaBytes Free" >>%log% echo. echo. >>%log% goto no33 :no3 echo Laufwerk E: = OK - SOLL = %Limit_E% MegaBytes echo " IST = %Festplattenplatz% MegaBytes Free" echo. :no33 if "%Limit_F%"=="AUS" goto end if not exist F:\nul goto fehler_2F FOR /f "usebackq delims== tokens=2" %%x IN (`wmic logicaldisk where "DeviceID='F:'" get FreeSpace /format:value`) DO SET "Festplattenplatz=%%x" SET Festplattenplatz=!Festplattenplatz:~0,-7! if %Festplattenplatz% GTR %Limit_F% goto no4 goto fehler_1F :fehler_1F echo Laufwerk F: = ACHTUNG - Limit erreicht - SOLL = %Limit_F% MegaBytes FOR /f "usebackq delims== tokens=2" %%x IN (`wmic logicaldisk where "DeviceID='F:'" get FreeSpace /format:value`) DO SET "Festplattenplatz=%%x" SET Festplattenplatz=!Festplattenplatz:~0,-7! echo " IST = %Festplattenplatz% MegaBytes Free" echo Laufwerk F: = ACHTUNG - Limit erreicht - SOLL = %Limit_F% MegaBytes >>%log% echo " IST = %Festplattenplatz% MegaBytes Free" >>%log% echo. echo. >>%log% goto end :no4 echo Laufwerk F: = OK - SOLL = %Limit_F% MegaBytes echo " IST = %Festplattenplatz% MegaBytes Free" echo. goto end :fehler_2D echo. echo Laufwerk D: = Laufwerk nicht vorhanden echo Laufwerk D: = Laufwerk nicht vorhanden >>%log% echo. >>%log% goto no22 :fehler_2E echo. echo Laufwerk E: = Laufwerk nicht vorhanden echo Laufwerk E: = Laufwerk nicht vorhanden >>%log% echo. >>%log% goto no33 :fehler_2F echo. echo Laufwerk F: = Laufwerk nicht vorhanden echo Laufwerk F: = Laufwerk nicht vorhanden >>%log% echo. >>%log% goto end :end echo. echo. if exist %log% goto byerror goto ende :byerror FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=%%d%%c_%%b_%%a FOR /F "tokens=1,2,3 delims=:," %%a in ("%time: =0%") do set CTIME=%%a_%%b_%%c echo. >>%log% echo. >>%log% echo Datum: %CDATE% - Zeit: %CTIME% >>%log% echo. >>%log% echo. >>%log% echo ES BESTEHEN AUF DEM GERAET >>%log% echo. >>%log% echo ---------------------------------------------------------------->>%log% echo %server% >>%log% echo ---------------------------------------------------------------->>%log% echo. >>%log% echo PLATZPROBLEME (siehe oben). >>%log% echo. >>%log% echo **** EINGRIFF ERFORDERLICH ****>>%log% echo. >>%log% if "%mailbyerror%"=="AN" goto mailbyerror if "%msgbyerror%"=="AN" goto msgbyerror goto ende :mailbyerror %mailprg% %log% -server %mailsrv% -to %receiver% -f %sender% -S %betreff% echo j| del %log% 2>nul goto ende :msgbyerror msg %angemeldeteruser% %server% hat Platzprobleme. Eingriff ist erforderlich. Protokoll unter %log%. goto ende :ende