Taken from the Windows IT Pro site — http://www.windowsitpro.com/article/windows-shell-bat-and-cmd/automate-the-windows-2003-defragmenter-without-paying-extra.aspx
Excellent Article Daniel..!
Defragmentation is a great way to keep workstations and servers running
at their best performance. Windows Server 2003 comes with a
defragmenter: dfrgntfs.exe. However, you can’t automate this
defragmenter unless you purchase a program such as Diskeeper. I didn’t
have money for such a program in my budget, so I created and scheduled a
batch file named Defrag.bat.
As Listing 1 shows,
Listing 1: Defrag.bat
defrag.exe c: -f
defrag.exe e: -f
defrag.exe f: -f
Defrag.bat is a simple program. It uses the defragmenter’s command-line
interface (defrag.exe) to run the defragmenter against each drive.
However, I wasn’t happy with Defrag.bat for two reasons. First, I had to
let the batch file run while being left logged on with my administrator
ID. Although I locked the screen for security reasons, I didn’t want to
leave myself logged on all the time. Second, I wanted more automation.
So, I did some digging around and found a means to automate the
procedure. I found that I could use the Windows scheduler but in a
different way that I didn’t know was possible: I could use the AT
command with a batch file.
I created a new batch file, Defrg. bat, which Listing 2 shows.
Listing 2: Defrg.bat
‘ BEGIN CALLOUT A
‘ END CALLOUT A
Echo Started %date%,%time% >>%logfile%
Echo ———————————– >>%logfile% Echo Defragmenting
C: drive >>%logfile% Echo. >>%logfile% defrag.exe c: -f >>%logfile% Echo
———————————– >>%logfile% Echo Defragmenting E:
drive >>%logfile% Echo. >>%logfile% defrag.exe e: -f >>%logfile% Echo
———————————– >>%logfile% Echo Defragmenting F:
drive >>%logfile% Echo. >>%logfile% defrag.exe f: -f >>%logfile% Echo
———————————– >>%logfile% Echo Finished
%date%,%time% >>%logfile% Echo ———————————–
Like Defrag.bat, Defrg.bat runs defrag.exe. However, Defrg.bat has a few
more features than Defrag.bat. I included code that documents when the
defragmenter starts and ends in a log file. I also added code that ports
the defragmenter’s screen output to the same log file (with some titles
in between) to record which drives are being defragmented. That way, I
can easily check to see whether the defragmentation operation ran and
whether any errors occurred.
To use the new script, I log on to the server with my administrator ID,
open a command-shell window, and run command
at 08:00pm /every:M,T,W,Th,F f:\Defrg.bat
(Although this command appears on several lines here, you would enter it
on one line in the command-shell window.) This command creates a new
scheduled item in Scheduled Tasks that runs Defrg.bat every weeknight at
8 p.m. (which is before our backup runs).
With this new batch file, I don’t need to be logged on for it to run.
Because Defrg.bat is running as a system process, the defragmentation
operation is performed in the background (i.e., no window comes up), but
Task Manager will show that defrag.exe and dfrgntfs.exe are running.
After Defrg.bat finishes, the scheduler will show 0x0 for a successful
execution. However, I always check the log file to make sure no problems
To use Defrg.bat, you simply need to replace f:\defrag.log in the code
at callout A in Listing 2 with the pathname to your log file. The AT
command and batch file work on Windows Server 2003, Windows XP
Professional, and Windows XP Home Edition. I recommend that you make the
batch file a read-only, hidden file. That way, no one can edit it so
that it damages your computers when the scheduled batch runs.
-Daniel L. Gillard