Softwarewindowsms-dosraymond-chenfile-namesbackward-compatibilitywindows-11
Windows Still Refuses a File Named CON Because the MS-DOS 1.0 Assembler Tacked .LST Onto Every Filename
Raymond Chen traced Windows' reserved names CON, PRN, AUX and NUL to MS-DOS 1.0, where typing PRN at an assembler prompt sent a listing to the printer; Windows 11 still blocks the bare names but now lets CON.txt and NUL.txt through.

Chen’s explanation on his blog, The Old New Thing, starts with a machine that had no folders. “DOS 1.0 didn’t support subdirectories, lowercase, or filenames longer than 8.3.” When you ran the assembler, it asked for a listing file and an object file, and you typed only the base name. “The ‘.LST’ and ‘.OBJ’ extensions were appended automatically. In fact, I don’t think you could disable the extensions; they were always added.”
That was a problem when you didn’t want a listing file on a nearly full floppy. The fix was a set of magic names. Typing PRN sent the output to the printer, NUL threw it away, and CON put it on the screen. The assembler never knew. It tried to create “PRN.LST,” and DOS sent the bytes to the printer.
Two rules fell out of that, Chen wrote. The names had to work with an extension, or else “when the assembler added ‘.LST’ to the filename, it would no longer be recognized as magical, thereby defeating the purpose of the magic.” And they had to work in every directory, “Because DOS 1.0 didn’t have subdirectories.” Once folders arrived, a magic name that worked only in the root would have broken the trick for anyone who changed into a folder and ran the assembler.
As for why the names survive, his answer is “Because everybody still relies on them.” Batch files hide output with >NUL, scripts test for a folder with if exist directoryname\nul, and old instructions still create files with copy CON.
Microsoft’s file naming documentation still lists CON, PRN, AUX, NUL, COM1 through COM9 and LPT1 through LPT9 as reserved, plus COM and LPT followed by the superscript digits ¹, ² and ³, which it says are “reserved in every directory.” It also says that “NUL.txt and NUL.tar.gz are both equivalent to NUL.”
On current Windows, that last line no longer matches what happens. Back on October 4, 2021, Eryk Sun noted on the Python bug tracker that “Windows 11 still reserves case-insensitive ‘nul’ in qualified paths, but none of the other DOS device names,” and that Microsoft “changed it to never reserve a name with an extension.” On October 19, 2026, Windows Latest tested Windows 11 26H2. Renaming a folder to CON returned “The specified device name is invalid,” and PRN, AUX, NUL and COM1 were refused too, but NUL.txt and CON.txt were created as normal files. In Command Prompt, echo hello > CON still printed to the screen.
The names have caused real damage. Microsoft’s MS00-017 bulletin from March 16, 2000 covered Windows 95 and 98 choking on a path that contained more than one DOS device name, which “usually results in a crash.” And in October 2024, Linux kernel developers renamed two Nouveau driver files from aux.c and aux.h to auxch.c and auxch.h, because on Windows “the Linux repository cannot be cloned and edited.”
Chen’s post is from October 22, 2003, and nothing in the 23 years since has removed the bare names. Windows 11 dropping the extension rule is the first real change in a long time. Is that the start of Microsoft retiring the magic names entirely, or is the extension the only part that will ever go?