We're at that point where the people who used to use MS-DOS a lot in the old days are going to start dying off and a lot of the information on how to use it won't be easily accessible since it's now quite archaic. It doesn't help that MS-DOS has always been complicated at best; as soon as Windows 95 hit, it dropped the skill floor on using a PC-compatible quite dramatically.
Unfortunately, due to the complexity I'll end up adding a lot of side notes as I go. MS-DOS is as wide as it is deep, and it gets worse once you get to machines from the early 90s and have to work with conventional memory, EMS, and XMS.
I'll start at the shallow end, then slowly add onto it as we go.
We'll skip most of the history of MS-DOS; Wikipedia or other sources have covered that in great detail.
My first brush with MS-DOS was in 1985, when my father got a Tandy 1000A. Yes, not the original 1000, but the silently revised model that Radio Shack put out not long after. The 1000 used BIOS revision 1.00.00, while the 1000A uses 1.01.00. The primary differences are bugfixes; the original BIOS had a data corruption issue with some hard drives. Otherwise, the hardware is identical between the 1000 and 1000A.
Something to note about these early IBM-compatibles (and the original IBM PC as well) is that they didn't come with a battery-backed clock. We'll be talking about that a little bit later when I get into the subject of two very important configuration files that will be used a lot up through the end of the Windows 9X era.
Making one of these early PCs boot is generally pretty simple, but there are a few things you absolutely should know about the boot process. You can boot from floppies that have the "system files" on them (e.g. the MS-DOS disk itself) or from a hard drive that has the system files installed. The caveat here is that the *location* of those system files matters.
First, the boot sector (at the very beginning of the disk layout) needs to have a proper boot sector. By default, a formatted floppy does not have this. You have to specify that you want those or add them immediately after formatting and before adding data. The reason why is that the next two files have a very important detail:
IO.SYS and MSDOS.SYS (both of which are hidden files that don't normally appear on the files list) MUST be located at the very beginning of the disk. If anything else is using the space where those files should be located, then you can't make the disk bootable without clearing out the space where those two files need to be first. The third important file, COMMAND.COM, is the command interpreter and it doesn't have to be at the beginning of the disk. The reason the two .SYS files have to be at the beginning of the disk has to do with the bootstrap process. The boot sector of a disk, the first thing the computer reads, is a very tiny space. The code that gets loaded and run thus needs the next two files with the core of the operating system to be immediately accessible on the disk without looking around for it. At that point, the OS has enough code to be able to look around on your disk for where the next steps are located.
The next thing we're going to talk about is the command interpreter. This is where you type commands into MS-DOS, and it comes from COMMAND.COM on your disk. Chances are on an old computer, the first thing the computer will do is to ask you for the current time and date. If you tap enter for each without entering anything, it'll default the PC's clock to midnight on January 1st, 1980.
On a very old version of MS-DOS, the command prompt will look something like...
A>
"Okay," you ask, "now what do I do?"
That's a fair question, and it's one every PC owner asked on their first boot. Let's talk about what this prompt actually is telling you, first, and this will also start to tie in some very important things about modern Microsoft Windows, too!
You're on the A drive, and it's waiting for a command. Not a lot of details there. You can, of course, change the prompt to give you more details, especially useful if you're using a hard disk. If you have a second floppy disk, you have access to a B drive. A hard disk will be your C drive (and possibly more if you have additional drives or partitions) and a CD-ROM drive will eventually show up with a drive letter later on as well.
This is why Windows starts with the C drive. A and B are reserved for floppies.
Let's try changing the prompt to something a little more useful, especially if you have a hard disk:
A>prompt $p$g
This command changes the prompt. The $p starts the prompt off with the full path to where you are. The $g adds the > after that. You could use $t and $d to show the time and date if you want, but $p$g is the prompt that you'll see most often on later MS-DOS versions and all the way up into the modern Windows era.
Now our prompt looks like:
A:\>
Not much of a change, right? It's a bigger one than it first appears to be. It's telling us that we're in the root directory of the disk on the A drive. Sometimes floppies (and pretty much all hard disks) will have what we call subdirectories. This term changed over time; in the modern era, they're called "Folders" and they're used to group files up together. For instance, if you have a bunch of documents saved together for a fall semester English class for the year 2025, you might have a subdirectory that looks like "FALL2025"
Ah, but shouldn't it have spaces? Sadly, the old MS-DOS was limited to 8.3 filenames. That means 8 characters (a character is a letter, number, or valid symbol) with an extension of 3 characters. The file COMMAND.COM we mentioned earlier is 8.3. Extensions are used to tell the user and programs what kind of file it is. A .TXT file is almost certainly going to be a plain text document with no special formatting, and it can be read by tools from the ancient past as well as modern versions of Notepad. An .EXE file is an executable file, meaning it's a program (or part of one; some programs have multiple .EXE files.)
Let's say we're inside that FALL2025 subdirectory I was mentioning earlier, and that it's on the hard disk that's the C drive. Our prompt looks like...
C:\FALL2025>
If we hadn't changed the prompt, it would have looked like...
C>
Sure is easier to know where you are when the prompt tells you, right? Okay, so how do you get in and out of these subdirectories? How do I change drives? Great question! Let's get into that now.
Let's switch over to the A drive for a moment. The command will be "A:" and pressing enter. It will look like this on screen:
C:\FALL2025>A:
A:\>
As you'd expect, then typing C: and pressing enter will take you back to the C drive and where you were already located on the C drive. That is to say, the FALL2025 subdirectory you created.
C:\FALL2025>A:
A:\>c:
C:\FALL2025>
You'll notice that the drive letters and directory names are case-insensitive. It doesn't matter whether you use uppercase, lowercase or even MiXeD case. Navigating doesn't seem too hard so far, right? Time to learn about two special terms the computer understands, "." and ".."
A single period by itself refers to the current subdirectory on the current drive, in other words where you are currently. This may seem useless at first, but it allows you do do things like...
C:\FALL2025>copy a:history.txt .
This tells our computer to copy the history.txt file that's on the A drive (in the current directory, which in this case is the root; we didn't specify a place, so it assumes we're where we want to be) over to the current directory we're in on the current drive. That, in this case, is the C drive in the FALL2025 directory.
You could also do something like this if you wanted to:
C:\FALL2025>copy a:history.txt b:
or..
C:\FALL2025>copy a:history.txt c:\finals\
or..
C:\FALL2025>copy a:history.txt c:\finals\history\
Okay, that first one seems pretty easy, right? Copy the file from the disk in drive A over to the one in drive B. That second one is a little more complicated. Despite the fact we're in the FALL2025 directory, we're telling the computer specifically to copy the history.txt file from the A drive over to the FINALS subdirectory off the root of the C drive.
The third example is only a little more complicated and builds off of that. Inside of that FINALS subdirectory off the C drive, we also have another nested subdirectory called HISTORY, and we're copying the history.txt file into that location.
We can extrapolate a few things based on what I've described so far. One is that if you don't specifically tell the computer where a file it, it will assume it's in the current location you're in. You can override that assumption by telling it a full path to a location or a relative path based on where you are on that drive.
We didn't cover ".." yet, but that's the final piece of the puzzle. Let's introduce the "CD" command. CD means Change Directory, and it does exactly what you would expect of it.
".." means the directory just above where we are currently. Since we're in FALL2025 on the C drive, .. will refer to C:\ which is the root of the C drive. So, with CD we can do..
C:\FALL2025>cd ..
C:\>
We're back on the root of the C drive. From there, we can go a lot of different places. For instance, we can CD into the finals directory by doing CD FINALS but there's an even better trick we can use here. Let's say we want to go into the history subdirectory of FINALS.\
C:\>cd finals\history
C:\FINALS\HISTORY>
Saves you a bit of time! You can also do..
C:\FINALS\HISTORY>cd ..\..
C:\>
We're now back at the root of that disk.
Now there are just two commands left to discuss for basic navigation: MD and RD.
MD is Make Directory. Remember that we're at the root of the C drive right now. If we do "md cheese" as a command, we're creating a new subdirectory off of the root of C called CHEESE. We could then go ahead and copy files into there if we want. In turn, RD means Remove Directory. It does exactly what you would expect, it removes an empty directory. You cannot use RD on a folder that has files in it, in older versions of MS-DOS. In later versions, there's a way to tell RD to remove a directory and everything that's inside of it (including any subfolders, and subfolders of subfolders, and so forth) but that's something we'll talk about only MUCH later for safety reasons.
We've talked about . and .., but there are two additional special characters that you will want to at least know about. The first is the question mark, which means "anything in this character slot". This probably doesn't mean much to you yet, so let's build an example situation and demonstrate how this gets used.
We have a disk in drive B. Let's start by going over to that disk and taking a look at it. We'll learn another very important command at this point.
C:\>B:
B:\>dir
DIR shows a directory of what files and subdirectories are in either the current location or a different location if you specify it. In our case, it prints out that we have nine files:
DUCK1.TXT
DUCK2.TXT
DUCK3.TXT
DUCK4.TXT
DUCK5.TXT
MALLARD.TXT
GOOSE.EXE
DUCKS.TXT
DUCKS.EXE
Okay. Let's try using the question mark with the dir command.
B:\>dir DUCK?.TXT
DUCK1.TXT
DUCK2.TXT
DUCK3.TXT
DUCK4.TXT
DUCK5.TXT
DUCKS.TXT
The question mark means "anything in that one character space", so the numbers 1-5 and the letter S apply and it shows us only what we asked for. The other files MALLARD.TXT, DUCKS.EXE, and GOOSE.EXE still exist, we just only wanted to see a subset of the files with that command.
You can use multiple question marks in a command. For instance..
B:\>dir duck?.???
DUCK1.TXT
DUCK2.TXT
DUCK3.TXT
DUCK4.TXT
DUCK5.TXT
DUCKS.TXT
DUCKS.EXE
As you can see, the ??? in the extension space covers literally any extension. We'll talk about an easier way to do that now. Time to introduce the very powerful * character. This is extremely powerful, but can be extremely dangerous when used with the delete command.
If we do...
B:\>dir duck?.*
DUCK1.TXT
DUCK2.TXT
DUCK3.TXT
DUCK4.TXT
DUCK5.TXT
DUCKS.TXT
DUCKS.EXE
Same results, right? We told it to match any single letter after the S (but not two or more characters after, so DUCKSAB.TXT wouldn't show up in the match if we had one on that disk) and the * matches literally anything in that space including multiple characters.
On the other hand, doing DIR DUCK*.TXT would show that hypothetical DUCKSAB.TXT I mentioned along with the other TXT files that start with DUCK, but would leave DUCKS.EXE out because that's not .TXT.
Let's use an example to show you how this can be dangerous. *.* means to match literally everything, so the command DEL *.* means you're telling the computer to delete literally every file in the current directory on the current drive. No second-guessing yourself, no confirmation, you're just wiping these files out.
A safer example would be COPY A:*.TXT B: which is telling the computer to copy all .TXT files from wherever you are on the A drive over to wherever you are on the B drive. The path (path means where in the subdirectory tree you are) is separate for each drive and so you have a current location for each one.
In short, you really need to be careful with wildcards (* is a wildcard for everything, ? is a wildcard for a single character) -- so, as you might imagine ????????.??? is the same as *.* on an old MS-DOS machine since your filenames are a maximum of 8.3 characters. On Windows, where filenames can be much larger, they won't be the same.
Let's review really quick for today's class:
We covered a little technical information about bootable disks (and we'll cover how to make such a disk later), we covered what subdirectories (also known as folders) are, how to navigate them using CD, pathing (using \ between directories to specify what's inside of one, multiple layers deep), COPYing files, DELeting files, MD to make directories, RD to remove them, the use of . and .. for navigation and specifying a precise location, and wildcards of both the ? and * variety.
On the next lesson, we'll talk about the PATH environment variable, which is a wonderful time saver, and then about the first of the two MS-DOS configuration files in the form of AUTOEXEC.BAT.