Description:
This script defrag the drive all, selected and single drive which has more than 30 % fragmentation.Default is 'all' options.
Instruction:
Option : one,all,seleted
fragmetvol : drive letter in list
example for all drive
option : all
fragmevol:[]
example for single drive
option : one
fragmevol:['C']
example for selected drive
option : select
fragmevol:['C','D','E']
Note :
Run as LocalSystem User
options="all"#all,one,select
fragmetvol=[]#one example:['C'],all example [],select example ['C','D']
import os
import re
from subprocess import PIPE,Popen
import ctypes
import re
import sys
def alert(arg):
sys.stderr.write("%d%d%d" % (arg, arg, arg))
class disable_file_system_redirection:
_disable = ctypes.windll.kernel32.Wow64DisableWow64FsRedirection
_revert = ctypes.windll.kernel32.Wow64RevertWow64FsRedirection
def __enter__(self):
self.old_value = ctypes.c_long()
self.success = self._disable(ctypes.byref(self.old_value))
def __exit__(self, type, value, traceback):
if self.success:
self._revert(self.old_value)
def defrag(fragmetvol):
with disable_file_system_redirection():
print("Fragment analysis....")
process=Popen("defrag -u %s:\ "%fragmetvol,stderr=PIPE,stdout=PIPE)
res,err=process.communicate()
if err:
print err
else:
print res
fragmetpercent=re.findall("Total\s+fragmented\s+space\s+=\s+\d+%",res)
fragpercentage=int(fragmetpercent[0].split()[-1].replace("%",""))
if fragpercentage>30:
alert(1)
processfragment=Popen("defrag C:\ /d /u ")
else:
alert(0)
print "The fragement percentage is less than 30% \n "+fragmetpercent[0]
if options=="one":
print "option: %s"%options
if len(fragmetvol)==1:
defrag(fragmetvol[0])
else:
print "Failure...."
elif options=="all":
print "option: %s"%options
if len(fragmetvol)==0:
vols=os.popen("wmic logicaldisk where drivetype=3 get caption").read().split()[1:]
fragl=[i.replace(":","") for i in vols]
for i in fragl:
defrag(i)
else:
print "Failure..."
else:
print "option: %s"%options
if len(fragmetvol)>1:
for i in fragmetvol:
defrag(i)
else:
print "Failure..."
Comments