What makes XCOPY so X?

Date:January 19, 2016 / year-entry #14
Tags:history
Orig Link:https://blogs.msdn.microsoft.com/oldnewthing/20160119-00/?p=92882
Comments:    35
Summary:It's extra awesome. But I don't know what the X stands for.

There's COPY and there's XCOPY. First things first: I don't know what the X stands for. Extra? Exorbitant? Excellent? My guess is Extended, but it's just a guess.

The built-in MS-DOS COPY command copied one file at a time. This was a real pain if you wanted to copy a bunch of files from one floppy disk to another, and you had a single-floppy machine. Copying all the files from one disk to another went like this:

  • You type COPY A:*.* B:
  • The COPY command reads FILE1.TXT into memory.
  • You are then told
    Insert diskette for drive B: and press any key to continue.
    
  • You swap disks and press a key.
  • The COPY command writes FILE1.TXT to the destination disk.

  • You are then told
    Insert diskette for drive A: and press any key to continue.
    
  • You swap disks and press a key.
  • The COPY command reads FILE2.TXT into memory.
  • You are then told
    Insert diskette for drive B: and press any key to continue.
    
  • You get the idea.

This gets really annoying if you are copying a bunch of small files, because you have to swap disks after every single file.

Enter XCOPY.

The XCOPY program improves upon the built-in COPY command by reading as many files from the source as will fit into memory before asking you to swap disks. Then it would write out everything before asking you to put the original disk back in. If you had a lot of memory (like 256KB), you could read the entire floppy disk into RAM, and then write it all out. Boom, your files are copied with only a single disk swap.

This fancy file copying was in a separate program because adding it to the core COMMAND.COM would have made it too big. (It is to the command processor's advantage to stay small so that it could remain in the transient program area and avoid having to be reloaded.)

As a result, there was a special wrinkle: Since XCOPY.EXE is a separate program, how do you copy files between two floppy disks, neither of which have a copy of XCOPY.EXE on them?

That's where the /W option comes in. I'm guessing that the W stands for "wait": It makes XCOPY wait for a keypress before starting to copy files. This gives you a chance to remove the floppy that has XCOPY and insert the disk containing the files you want to copy.


Comments (35)
  1. Tom Lawrence says:

    Wow… It boggles the mind that we used to live like that. Actually, it boggles my mind that *I* used to live like that and had completely forgotten!

  2. Ben says:

    These are my favorite post types!

    Off topic: When is the Suggestion Box Re-opening? I want to ask more Windows History Related Questions! Did you have any involvement in “Windows 95 Plus!” ? I’ve only seen one suggestion box even mentioning it (and they were asking about versions). You’ve already covered Windows Pinball, any other interesting tidbits? Or was it developed mostly by outside vendors (similar to Pinball?) I have fond memories of Plus! as a kid, specifically the wonderful themes that were included with it (Inside Your Computer is still one of my favorites; I wish I could find a higher Resolution version of that background)

  3. SimonRev says:

    Thanks for helping me remember how amazing it was to upgrade to have a hard disk as well as how worth it it was to spring for the 2nd floppy drive on early PCs

  4. MC says:

    I count myself lucky that my PC had twin drives, never noticed having to swap disks between files. Still have a box of 5-1/4″ floppies (nothing to read them on), not going to throw them away though, must be from the early 80s. I wonder if a 5.25″ USB floppy drive exists anywhere.

    1. Electron Shepherd says:

      Try http://www.deviceside.com/fc5025.html for those 5.25″ disks. Not an endorsement at all, just the combination of curiosity and a spare five minutes to do some searching.

    2. wqw says:

      Even if it does exist I doubt you’ll be able to read these floppies if not formatted anytime during recent 20 years.

    3. Euro Micelli says:

      A USB 5-1/4″ drive would do you no good and it might not even be possible. Windows NT stopped supporting 5-1/4″ floppy drives with Windows NT 4.0. I don’t remember if Windows 98 kept support. Windows 95 supported them.

      I don’t know why that decision was made, but my suspicion at the time was that 5-1/4″ floppy drives were dumb controllers that relied on carefully timed signals, and that they could not be reliably driven from a non real-time fully preemptive OS like Windows NT, without massive efforts, high cost, or causing unacceptable reliability issues. Windows 95 managed to do it, but maybe it had to suspend everything else while accessing the drive.

      I’m still not sure, and remain curious as to the actual reason. Microsoft is not one to drop support for hardware without a good justification.

      1. Retron says:

        Regarding NT and 5.25″ floppy drives – no, they aren’t unsupported after NT4. I use one on my old P3 Windows 2000 box and it works just fine, just as it did when I tried Vista on it (just for fun – it was too slow for general use).

        Heck, even Windows 10 supports floppy drives, including 5.25″. They re-did the icon for it too, as it hadn’t been updated for a while! (And yes, I have an i7-2600K machine with a built-in floppy port on the motherboard. They seem to be pretty much unobtainable with anything newer.)

      2. John Elliott says:

        I don’t think a 5.25″ drive is any more or less sensitive to timing than a 3.5″ drive — they both talk to the floppy controller over the same Shugart interface. It might require different step rates, but that’s just a matter of changing a couple of parameters.

        1. Dave Bacher says:

          The computer is talking to a USB port. There’s a microcontroller talking to the drive. Timing, etc. should be handled by the microcontroller — it’s just going to report back to Windows as a SD Card reader that happens to have a 360k volume. The microcontroller will translate from linear to track and sector, and hide that detail from the computer. It also potentially will read ahead and write behind, to make using it from Windows less terrible.

          1. John Elliott says:

            The comment I’m replying to is discussing the floppy driver in Windows NT 4.0. NT 4 doesn’t include support for USB, which would include USB floppy drives.

      3. Are you sure that’s the case? Because I have a computer with a fully functional 5.25″ floppy drive running Windows XP that begs to differ. The only requirement for XP is that it’s a 1.2MB 5.25″ drive; 360KB drives won’t work.

        My understanding is that support for 5.25″ drives was removed for 64-bit versions of Windows NT, probably due to complications in porting the driver and little-to-no customer demand. All of the Windows 9x operating systems supported the drives though.

        1. Retron says:

          No, the floppy driver (flypdisk.sys) was still included in x64 Windows up to 8.1.

          It went AWOL in beta versions of Windows 10, but after lots of us posted feedback it was restored in time for the RTM release of Windows 10.

          Floppies work just fine with the 1511 update of x64 Windows 10 too. I suspect that as it made it to Windows 10, floppy drivers will be around for a few years yet!

        2. Euro Micelli says:

          No, I’m not 100% sure anymore, and several comments and sources indicate that I was probably wrong. My comment in reference to NT 4.0 and 5.25 floppy drive support specifically was based on my recollection of coverage in BYTE around the time of the release of Windows NT 4.0. I specifically remember thinking at the time “oh, bummer, but I guess nobody is using them anymore”. Unfortunately I don’t have that issue anymore so I can’t double-check what it really said. I might be mis-remembering completely. It’s been 20 years and it wasn’t a critical fact to me. I apologize if that is the case.

  5. Rob Sharp says:

    The X doesn’t stand for X-treme?

    1. Dave says:

      You mean like “Wormhole X-Treme!” http://stargate.wikia.com/wiki/Wormhole_X-Treme!

  6. JimT says:

    I was working at MS (in the Northup building) in 1983 and knew a little about the early XCOPY situation. IBM made an excellent program called XCOPY.EXE for PCDOS2. It was nice, but MS did not have the source or rights to it. An MS coworker of mine whose initials were D.I. wrote a functional clone (in assembly language, of course) of the IBM XCOPY for MS and called it… XCOPY.EXE! I believe that it is this cloned XCOPY that soon made its way into the official MSDOS releases.

    I have no guess about what the X means beyond the already-suggested “eXtended”.

    1. Yuhong Bao says:

      I think they started using the original IBM source starting with MS-DOS 3.3.

  7. cheong00 says:

    Btw, I think the more important value of xcopy is the “/m” switch, which is good for doing backup or copying files over multiple disks (when use with “attrib +a /s”).

  8. Neil says:

    I have to admit I always wondered what the /W switch was for.

    My memory is probably rusty but as I recall you actually had to swap disks at least twice per file, since COPY opened the second file before reading the first.

  9. Tor says:

    Could you map A: and B: to the same physical floppy drive? I do not remember that.
    Then again, my first PC had a hard disk (60 MB i think), so I avoided the truly dark times.

    1. SimonRev says:

      If your PC had only one floppy drive, then DOS acted as if there were two virtual floppy drives (of which one was actively connected to the physical drive) and would interject the dreaded “Insert diskette for drive B: and press any key to continue” whenever an attempt was made to access the inactive drive. IIRC, you pretty much had to heed that message or you would screw up your data.

  10. Mason Wheeler says:

    I must have been late to the party. I don’t think I ever had a single-floppy-disc computer, at least not until they started making them with one floppy and one hard drive.

    1. cheong00 says:

      Those things are common in early 198x, when harddisk was still very expensive.

      That’s also the time when most games do not assume harddisk and loads directly from floppy.

  11. DWalker says:

    When you had dual floppy drives, XCOPY was also much faster at switching from reading from the source drive to writing to the target drive. I remember that the old Copy command was quite slow at this switching back and forth.

  12. Dave Bacher says:

    I think at one point in time, either PC-DOS 7 or OS/2 3/4/4.5 identified it as “Extended Copy Utility” for xcopy /? — I don’t have either handy to verify that at the moment. I seem to recall the old MS-DOS manuals identifying it as such also. Even if you had two floppies, xcopy was often much faster.

    I believe on OS/2 3/4/4.5 it was also compiled 32bit, IIRC, and could use the full system RAM for the single disk scenario. I seem to recall copying ZIP disks that way — but its been a while and I could be mistaken.

    1. Nitpicker (Corner?) says:

      > Extended Copy Utility

      That’s what Task Manager calls it – a title I presume it’s pulling out of XCOPY.EXEs resource fork.

      1. Locate your “xcopy.exe” file (for instance, in C:\WINDOWS\System32), right-click the icon, select “Properties”. And there you go: “Extended Copy Utility”

        1. (Of course, in Windows 7 you’d press [Windows Key], “xcopy.exe”, [Menu Key], [Up], [Return].)

          1. MarcK4096 says:

            Nice…

  13. Azarien says:

    I still have a floppy drive in my main Windows 7 (soon-to-be Windows 10) machine, though it’s been several years since I last used it.

  14. aaron says:

    Both of these are inferior to the new “RoboCopy”! (Robust Copy), with more options and features than you can imagine.
    Including the ability to delete files. (A copy program that erases stuff? Madness, I say!)

    1. Erik F says:

      You’ll have to complain to OCP about the extra directives.

Comments are closed.


*DISCLAIMER: I DO NOT OWN THIS CONTENT. If you are the owner and would like it removed, please contact me. The content herein is an archived reproduction of entries from Raymond Chen's "Old New Thing" Blog (most recent link is here). It may have slight formatting modifications for consistency and to improve readability.

WHY DID I DUPLICATE THIS CONTENT HERE? Let me first say this site has never had anything to sell and has never shown ads of any kind. I have nothing monetarily to gain by duplicating content here. Because I had made my own local copy of this content throughout the years, for ease of using tools like grep, I decided to put it online after I discovered some of the original content previously and publicly available, had disappeared approximately early to mid 2019. At the same time, I present the content in an easily accessible theme-agnostic way.

The information provided by Raymond's blog is, for all practical purposes, more authoritative on Windows Development than Microsoft's own MSDN documentation and should be considered supplemental reading to that documentation. The wealth of missing details provided by this blog that Microsoft could not or did not document about Windows over the years is vital enough, many would agree an online "backup" of these details is a necessary endeavor. Specifics include:

<-- Back to Old New Thing Archive Index