Create batch file to log chkdsk results

You can use the AT command in Windows to schedule chkdsk to automatically run on a daily basis. The problem with this technique is that chkdsk results are quickly

    Requires Free Membership to View

flashed on the screen, then disappear. If you're not sitting at the server console when chkdsk runs, you won't ever see the scan results.

A better solution would be to create a batch file that logs the chkdsk results, so you can read those results at your leisure. I've used the following command to automate chkdsk:

AT \\Server1 3:00 /Interactive /every:Friday CHKDSK C:

This command runs chkdsk every Friday at 3:00 a.m. The command is set up to call chkdsk directly. But if you want to log the results, you'll need to tweak this command so that rather than calling chkdsk directly, it calls a batch file that in turn calls chkdsk.

More on CHKDSK

Learn how to use CHKDSK to detect file and folder corruption.

Learn how to use the Chkdsk utility in Windows Vista.

Visit our resource center to find more information on using  CHKDSK and other storage management tools and utilities.

You can name the batch file anything you want. Here we'll call it DRIVSCAN.BAT. Now we'll alter the AT command so it calls DRIVSCAN.BAT instead of chkdsk. The new command will look like this:

AT \\Server1 3:00 /Interactive /every:Friday DRIVSCAN.BAT

Now that we've changed our AT command to call a batch file, we need to create a batch file named DRIVSCAN.BAT. There are several methods for creating batch files; the easiest to use is probably Notepad. When you save your batch file, you must save it to a folder in the system path so the AT command can find it.

Exporting the results of a chkdsk to a log file is simple. In a command-line environment, placing the greater than (>) symbol at the end of a command tells Windows to export the command's results. You can complete the process by following the > sign with the filename you want the command results sent to. For example, if you wanted the chkdsk results exported to a file named SCAN.LOG, you'd use the following command:


You could use the command shown above as the only command in the DRIVSCAN.BAT file, and the batch file would work fine. The problem is you've told Windows (through the AT command) that you want to run the batch file every Friday at 3:00 a.m. The first time the command runs, the SCAN.LOG file will be created. But the second time the batch file runs, the chkdsk results will be appended to the end of the log file. In some environments, this behavior might be perfectly acceptable, but I prefer to place each set of chkdsk results in its own unique log file. This means that each time the batch file runs, it must generate a unique filename.

The easiest way to accomplish this is to base the filename on the date. The following command will help us create a filename based on the system date. The command takes the date, puts it in MMDDYYYY format and appends the .LOG extension. The date with the .LOG extension is assigned to a variable named datefile. For example, on July 1, 2007 the datefile variable would contain: 07012007.LOG

The command for setting up the datefile variable is:

for /F "tokens=2,3,4 delims=/ " %%i in ('date /t') do set datefile=%%i%%j%%k.log

If you want to view the contents of the datefile variable, you can do so by using the echo command. Since datefile is a variable, you must place percentage signs on each end of it any time you reference it. For example, the command for viewing the contents of this variable would be:

Echo %datefile%

But we're not interested in merely viewing the contents of the datefile variable. Our goal is to use the variable's contents as a filename, and to export the chkdsk results to the file that is referenced by the datefile variable. To do so, use this command:
Chkdsk > %datefile%

The batch file in its entirety would look like this:
for /F "tokens=2,3,4 delims=/ " %%i in ('date /t') do set datefile=%%i%%j%%k.log Chkdsk > %datefile%

You could easily add a file system path to the batch file if you wanted to place the log files in a specific folder. There are several ways to do this, but the easiest is to include the path information as a part of the chkdsk command. Here's an example of the chkdsk command with a path added below:

Chkdsk > c:\logs\%datefile%

In this article I've shown you how to log the results of each chkdsk scan. However, you still have to go to each individual server to read the logs. My next article will show you how to modify the batch file we've created so that the server will automatically email you the scan results.

About the author: Brien M. Posey, MCSE, is a Microsoft Most Valuable Professional for his work with Windows 2000 Server, Exchange Server and IIS. He has served as CIO for a nationwide chain of hospitals and was once in charge of IT security for Fort Knox. He writes regularly for SearchWinComputing.com and other TechTarget sites.

This was first published in July 2007

There are Comments. Add yours.

TIP: Want to include a code block in your comment? Use <pre> or <code> tags around the desired text. Ex: <code>insert code</code>

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy
Sort by: OldestNewest

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

Disclaimer: Our Tips Exchange is a forum for you to share technical advice and expertise with your peers and to learn from other enterprise IT professionals. TechTarget provides the infrastructure to facilitate this sharing of information. However, we cannot guarantee the accuracy or validity of the material submitted. You agree that your use of the Ask The Expert services and your reliance on any questions, answers, information or other materials received through this Web site is at your own risk.