Consolidate Separate .cmd and .bat Files

After reading Chris Taylor's article (Reader to Reader: "BAT vs. CMD," July 2001) about using .cmd files for Windows 2000 and Windows NT and .bat files for Windows 9x, I wanted to mention a more efficient way to accomplish the main task: protecting an OS from a program that wasn't designed for the OS. Having separate .cmd and .bat files, as Chris suggests, creates version-control problems and necessitates extra work when you make script changes. A better solution is to create separate sections in the script file (i.e., a section for Win2K and NT machines and a section for Win9x machines). To create these sections, you need to test for the environment variable OS. This variable is on Win2K and NT systems and has the value Windows_NT. The following script tests for the OS variable.

IF "%OS%"

"Windows_NT" GOTO Win2KNT REM <Win9x instructions here> GOTO Common :Win2KNT REM <Win2K/NT instructions here> :Common REM <Common instructions here>

Because the OS variable doesn't exist on Win9x, you need to use the string value for the comparison operator test. Otherwise, you'll receive an error for the nonexistent variable.

If you also need separate commands for Win2K and NT machines, use the following code in the Win2KNT section:

FOR /F "tokens=1" %%I in ('ver') 	DO set OSVer=%%I
IF %OSVer%Windows GOTO NT4

REM <Win2K instructions here>
GOTO Common

REM <NT instructions here>

This code checks the Ver command's output, which is different for each OS (i.e., Microsoft Windows 2000 on Win2K and Windows NT Version 4.0 on NT 4.0). My method is basic, and others might have more elaborate solutions. However, my solution lets you have just one version of common task scripts for a mixed workstation environment.

Hide comments


  • Allowed HTML tags: <em> <strong> <blockquote> <br> <p>

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.