What happened to the ability to use … (three dots) to refer to the grandparent directory?

In Windows 95, you could type cd ... to go up two directories, or cd .... to go up three directories, and so on. (You could also use triple-dots in paths passed to functions like Create­File.) Where did this come from?

This interpretation of dots beyond two was introduced in Windows 95 for compatibility with the Novell NetWare redirector. Windows 95 came with a native Novell NetWare client, and one of the quirks of the Novell NetWare client is that it supported this dots beyond two feature. For compatibility, therefore, Windows 95 supported it as well. The parsing of the dots was done inside the Windows 95 installable file system component, so it was available to all file systems, not just NetWare volumes, but the intended audience for the feature was Novell NetWare clients.

Windows NT didn't pick up this feature because, well, I don't know. Maybe they thought it was a yucky hack. Actually, thinking more on it, it's probably ... is a legal NT file name.

Comments (35)
  1. Boris says:

    The obvious question is how this feature made it past -100 points at Novell, given the presumably existing ability to type cd ..\..\ and so forth.

    1. Brian_EE says:

      Given the timeframe when Novell was popular, I would speculate that there was no such thing as a -100 points criteria then. These were the days of developers being able to add “rogue” features easily.

      1. cheong00 says:

        Or it could be under the name of “Novell compatibility”, and get a “Go” when master item “Novell compatibility” itself goes beyond -100 points. It should be easy since at that time Novell Netware was so popular.

        1. Brian_EE says:

          Boris asked how it got past the -100 points at Novell, not how the compatibility feature got past the -100 points at Microsoft. I was pointing out that there was probably no such thing as a -100 point feature requirement at Novell, especially at that time.

  2. Juan says:

    I have never ever heard … was a legal file name in NT. What is stand for? I knew CON and others but never …

    1. Raymond said ‘legal’, not ‘reserved’ or ‘illegal’.

    2. Kevin says:

      It’s legal-ish. You have to use the magic \\?\ prefix to get at it, and it confuses the hell out of most Windows software, but you can interact with it so it’s legal.

  3. SimonRev says:

    During Windows 95 I used a popular DOS replacement product (and still use one of its successor command processors) that supports triple and higher order dots. I find it jarring that the rest of Windows doesn’t accept it.

    1. SimonRev says:

      For what it is worth, I cannot seem to create a file with the name of …

      SaveAs common dialog rejects it as an invalid filename.

      // treats it as if you are trying to write the directory TempFiles
      // I assume that it is parsing the “…” as “..” followed by “.”
      File.WriteAllText(@”c:\TempFiles\tmp1\…”, “Hello”);

      1. Juan says:

        ….txt seems to be ok for all tools. “…” gives access denied.

        1. A. Skrobov says:

          Windows filenames may not end with a dot. Explorer (or cmd) won’t let you create “txt…” either — it will silently rename it into “txt”.

  4. 12BitSlab says:

    Having never worked w/ Netware, I wasn’t aware that the triple dot stuff was even in Win95.

    Learn new stuff everyday.

  5. Carl Walsh says:

    Our work’s default dev environment includes doskey aliases for .. to “cd ..”, and … to “cd ..\..”, etc. for many dots. It’s really convenient when you’re changing directory to many different folders.

  6. MC says:

    cmd.exe /c mkdir …
    replies with “A subdirectory or file … already exists” so it’s probably misinterpreted it somewhere. Trying to create the file with echo hello >… gives an “Access is denied.” error.

    1. George says:

      It may be doing different things in different contexts.
      If you type ‘cd …’ from a sufficiently deep dir in a path, you stay right where you are.

      I remember Novell NetWare. And Artisoft Lantastic. And a few others. Networking was quite a pain at the time that Windows 95 was released.

    2. Neil says:

      Normal processing removes all trailing .s which is why everyone is resorting to \\?\ which disables it (and other stuff too).

  7. ChrisR says:

    Surprisingly, it does work:
    HANDLE file = CreateFile( L”\\\\?\\C:\\…”, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL );

    1. ChrisR says:

      Looking further, you can tell cmd.exe to call CreateFile this way as well:
      echo hello>\\?\C:\…

      Explorer can’t open it, but you can make cmd.exe show it’s contents:
      type \\?\C:\…

      1. poizan42 says:

        The filesystem shell namespace provider could *really* use an overhaul. There’s absolutely no reason to keep enforcing the old “win32” restrictions, at least nor for accessing stuff. I guess there’s going to be some extra pressure on the shell team now that .NET is going to support long path in the recent future.

    2. Joshua says:

      What will you do when I put a \ in a file name?

      1. Holger Stenger says:

        I will ask how you did it. Hexedit the file system on disk?

        1. Karellen says:

          Put in on a Linux-based SMB share.

          1. ender says:

            Samba translates characters that are illegal on Windows to make the files accessible.

  8. rich says:

    OK, out of interest, who’s still using Netware?

  9. Euro Micelli says:

    It can be created, you just need the right voodoo:

    C:\test1>copy con “\\?\C:\test1\…”
    Hello there
    1 file(s) copied.

    Volume in drive C is Main
    Volume Serial Number is 1384-FABC

    Directory of C:\test1

    02/02/2016 12:01 PM .
    02/02/2016 12:01 PM ..
    02/02/2016 12:01 PM 13 …
    1 File(s) 13 bytes
    2 Dir(s) 2,933,960,704 bytes free

    1. SimonRev says:

      Tried that. I can create the file, but cannot open it in Notepad (permissions error)

    2. AndyCadley says:

      I’m guessing bonus points if you create it as a hardlink to the grandparent directory?

      1. Azarien says:

        I made a junction:

        C:\test\test2\test3>md “\\?\c:\test\test2\test3\…”
        C:\test\test2\test3>linkd “\\?\c:\test\test2\test3\…” c:\test
        Link created at: \\?\c:\test\test2\test3\…

        But you can’t just cd … because you need the \\?\ syntax. And when you use this syntax, it says it cant cd to a UNC path.
        It also doesn’t work in Explorer.

  10. Drak says:

    Interesting. When I try to rename a document in a (Windows 7) Explorer window and change the name to … it throws up a dialog saying: “There is already a folder with the same name as the file name you specified. Specify a different name,”

    1. Ray Koopa says:

      The Windows Explorer seems to be very restrictive anyway in file names. You cannot even create “.htaccess” or anything without a name in front of the dot, it will just cancel with “Please enter a file name”.

      1. Darran Rowe says:

        There is a way around this.
        The reason Explorer dislikes this in the first place is that it doesn’t know if the .htaccess is meant to be the file name or extension, so it just goes no. But if you give it an answer for this, then it will happily make the file.
        The way to do this is by adding an extra . to the end of the file name, so .htaccess. and explorer will remove the trailing . automatically.

  11. poizan42 says:

    Strictly speaking . and .. are legal NT file names as well, they just always refer to the current and parent directory, so you can’t create a new file with those names as they are already in use.

    1. Karellen says:

      Actually, I seem to remember not too long ago on this blog (although long enough that I can’t find it, and my search-fu fails me) OGH saying that “.” and “..” were not actually created as entries in NTFS filesystem, and also weren’t faked by the NTFS filesystem driver either, and therefore weren’t returned by some low-level directory-listing API. Rather, the “.” and “..” are faked by the Find{First,Next}File*() API instead.

      Therefore, if the NTFS filesystem and NTFS driver aren’t in charge of the “.” and “..” entries, and there exist low-level APIs that talk to the filesystem at this level, it might be theoretically possible to use those APIs to create “.” and “..” entries as regular files.

      I wonder what would happen to Find{First,Next}File*() if that were the case. Would it return only the real (on-disk) “.” and “..”? Or only the “.” and “..” it normally fakes? Or both?

  12. Calvin says:

    I tested it out by running the command “md \\?\c:\…” and now I cannot delete or rename the folder through either Explorer or the command prompt.

  13. Stu says:

    It’s a shame cmd.exe doesn’t support this, it’s quite a nice way of getting around the filesystem.

Comments are closed.

Skip to main content