Automate the Windows 2003 Defragmenter Without Paying Extra…

Taken from the Windows IT Pro site  —

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

@Echo Off

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

@Echo Off


Set logfile=f:\defrag.log


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

were encountered.

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

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: