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%"<h1><a name="_Windows_NT_GOTO_Win2KNT_REM_lt_Win9x_instructions_here_gt_GOTO_Common_Win2KNT_REM_lt_Win2K_NT_instructions_here_gt_Common_REM_lt_Common_instructions_here_gt_pre_p_Because_the_i_OS_i_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_p_p_If_you_also_need_separate_commands_for_Win2K_and_NT_machines_use_the_following_code_in_the_Win2KNT_section_p_pre_FOR_F_tokens_1_I_in_ver_DO_set_OSVer_I_IF_OSVer_">"Windows_NT" GOTO Win2KNT
REM <Win9x instructions here>
GOTO Common

:Win2KNT
REM <Win2K/NT instructions here>

:Common
REM <Common instructions here></a></h1>

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

:NT4
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.