In regards to defragging, you could follow this syntax:
------------------------------------
Usage:
defrag <volume> [-a] [-f] [-v] [-?]
volume drive letter or mount point (d: or d:\vol\mountpoint)
-a Analyze only
-f Force defragmentation even if free space is low
-v Verbose output
-? Display this help text
------------------------------------
So essentially, make a file called defrag.bat and have this be the code:
defrag c: -f
Or a similar switch, pending your needs.
I have used diskkeeper and I love it. I also use the server edition which lets you push out the software and monitor fragmentation levels on networks.
I disagree with AU, but that is your call