28

I know the Windows OS is (generally) case insensitive. Is this true for all the Windows OSes (from Windows 95 up to Windows 7)? Is there any registry setup to make Windows case sensitive?

Peter Mortensen
  • 12,090
  • 23
  • 70
  • 90
prosseek
  • 5,794
  • 21
  • 59
  • 78
  • 2
    Yes, as were all versions of MS-DOS from where this attribute was inherited. (Of course MS-DOS didn't preserve case, so things have moved forward :-).) – Richard Jul 21 '10 at 09:03
  • 1
    Case insensitive with respect to what? File names? Passwords? – Peter Mortensen Jun 23 '14 at 13:38
  • [Not by default. Here is the right answer.](http://superuser.com/questions/266110/how-do-you-make-windows-7-fully-case-sensitive-with-respect-to-the-filesystem/430645#answer-842670) – William Oct 15 '15 at 02:30

6 Answers6

26

Microsoft added a new case sensitive flag (attribute) that can be applied to NTFS directories (folders). For directories that have this flag set (enabled), all operations on files in that directory are case sensitive, regardless of whether FILE_FLAG_POSIX_SEMANTICS was specified. This means that if you have two files that differ only by case in a directory marked as case sensitive, all applications will be able to access them.

Starting with Windows 10 build 17107, Microsoft has added the ability to view and modify this flag to the fsutil.exe command.

To check if a directory is case sensitive, run the following command:

fsutil.exe file queryCaseSensitiveInfo <path>

To mark a directory as case sensitive, or case insensitive respectively:

fsutil.exe file setCaseSensitiveInfo <path> enable
fsutil.exe file setCaseSensitiveInfo <path> disable
Alexander Popov
  • 361
  • 3
  • 3
21

Yes, this is true for all versions of Windows. There is no way to make Windows case sensitive. Keep in mind though that some apps which were originally developed for Unix/Linux and then ported may be case-sensitive. Cygwin, for example, is case sensitive. This behavior is extremely rare though.

nhinkle
  • 37,198
  • 36
  • 140
  • 177
  • 10
    "There is no way to make Windows case sensitive." isn't *quite* accurate. There are ways to make parts of Windows case-sensitive, as explained in the other answers. – sleske Jul 21 '10 at 08:52
  • It's true though that from a *user* point of view, Windows filenames are case-insensitive, and there's no (easy) way to change that. – sleske Jul 21 '10 at 08:56
  • Some aspects of Windows can be made case sensitive, but it relies on the capabilities of other PCs. Saving to a shared directory that is really on a Linux PC will allow case sensitive filenames to be used. This is due to the FILESYSTEM like @sleske said, not because "it's Windows" – UtahJarhead Oct 03 '12 at 17:26
  • 1
    This is not entirely true. You can make severs versions of Windows and some desktop version case sensitive with Windows Services for UNIX. – Keltari Sep 21 '13 at 22:58
  • @Keltari thank you; that has already been pointed out multiple times in the past 3 years though... both in these comments and in other answers. – nhinkle Sep 21 '13 at 23:01
  • Try running `/bIn/BaSh` in Cygwin and tell me again that it is case sensitive. – Matt Feb 18 '15 at 20:51
  • @Matt if you read all of the comments and answers here you'll see that's already been very thoroughly covered. – nhinkle Feb 18 '15 at 22:35
  • @nhinkle: Yes I've read everything. Yet the fact remains that since Cygwin runs on Windows and Windows uses case insensitive filesystems, there is nothing about Cygwin that can be said to be any more case sensitive than the Windows it runs on. – Matt Feb 18 '15 at 22:48
  • 1
    @Matt This answer isn't right(although they are appropriate answers posted). You just don't have case sensitivity enabled. http://superuser.com/questions/266110/how-do-you-make-windows-7-fully-case-sensitive-with-respect-to-the-filesystem I have to files one named testfile and Testfile. `/bIn/BaSh` doesn't work on my system. – William Oct 15 '15 at 02:09
  • @William, so what you are saying is that you can run Windows on a case-sensitive filesystem, but Windows itself does not support it, so the case-sensitive files must be accessed through third-party software such as Cygwin. Is that correct? – Matt Oct 15 '15 at 15:52
  • @Matt Windows APIs don't support case sensitive files POSIX ones do. So yes I believe we understand each other. NTFS can support case sensitivity from what I understand. – William Oct 15 '15 at 15:56
  • 2
    This is not True anymore, Now you could make Windows 10 case sensitive on a per-directory basis. See [this article](https://www.howtogeek.com/354220/how-to-enable-case-sensitive-folders-on-windows-10/) for more info. – s.ouchene Nov 26 '19 at 22:54
11

Actually, this depends on the API / Windows subsystem you (your program) use.

If you use the "Windows API" (the standard for Windows apps), then filenames are case-insensitive. However, if you use the POSIX subsystem (aka Windows Services for Unix), you can enable case-sensitivity.

See e.g. this MS Support article: Enable case sensitive behavior with Windows XP and Interix Subsystem or SFU

William
  • 1,338
  • 6
  • 25
  • 48
sleske
  • 22,652
  • 10
  • 69
  • 93
6

Cygwin tries to emulate Unix. Thus it needs to inherit case sensitivity to not break applications. Windows on itself isn't case sensitive. It's about the file system. You can read more about it in File system, File systems under Microsoft Windows (Wikipedia).

Peter Mortensen
  • 12,090
  • 23
  • 70
  • 90
  • 1
    Correct. NTFS *is* case-sensitive, it's only disabled in Windows. One can enable it but it is extremely `unsupported`..so to say. – Apache Jul 21 '10 at 07:49
  • This is directed to the OP not MijndertStuij, but I didn't want to step on his toes. He deserves the rep on this one. Whether it's FAT (as the original MS-DOS and Windows versions) or NTFS (Windows NT and later), they are all case insensitive. You will notice these differences a bit if you save files to a Linux filesystem over Samba (File and Print Sharing's cousin). – UtahJarhead Oct 03 '12 at 17:24
  • From Wikipedia NTFS page: Allowed characters in filenames. - In Posix namespace, any UTF-16 code unit (case sensitive) except U+0000 (NUL) and / (slash). In Win32 namespace, any UTF-16 code unit (case insensitive) except U+0000 (NUL) / (slash) \ (backslash) : (colon) * (asterisk) ? (Question mark) " (quote) < (less than) > (greater than) and | (pipe) [5] – UtahJarhead Oct 03 '12 at 17:29
  • Try running `/bIn/BaSh` in Cygwin and tell me again that it is case sensitive. – Matt Feb 18 '15 at 20:54
  • Adding onto what @Apache said: it’s not so much as unsupported... it’s just that almost all of Windows is written under the assumption of case insensitivity. *Many* programs assume case insensitivity, too. For example, Adobe’s Creative Suite contains copies of the same DLL for each program (i.e. Photoshop has its own copy of the same DLLs InDesign uses). These DLLs are sometimes all lowercase, sometimes capitalized is various places, etc. And when it asks Windows for `abc.dll`, it’ll load `aBc.DlL` just happily. My guess is a holdover from 8.3 filenames where all filenames are uppercase. – Cole Tobin May 17 '20 at 15:09
6

This is from here. You can set the HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive registry value to 0 as other authors suggested. Create a file named add.reg with the following content and run it.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel]
"obcaseinsensitive"=dword:00000000

Then use Cygwin to work with case-sensitive filenames.

In order to do so, you need to mount NTFS filesystems with posix=1 option in your /etc/fstab, as this article suggests. Here's a snippet from my fstab:

none                    /cygdrive       cygdrive        binary,posix=1,user             0 0
C:                      /cygdrive/c     ntfs            binary,posix=1,user,auto        0 0
C:/Users                /home           ntfs            binary,posix=1,user,auto        0 0

Once the above is done, you'll be able to deal with case-sensitive filenames using bash, mc, git etc.

Make sure to reboot after editing both.

William
  • 1,338
  • 6
  • 25
  • 48
4

Barfieldmv is correct. The filesystem is indeed case sensitive and files are stored with their appropriate case. The file access layer is responsible for removing the case when matching files to new file descriptors

whardier
  • 151
  • 1
  • 1
    Can you provide further details on how this abstraction between the filesystem and the user works (ie, provide a step by step example)? You should also address the op's actual questions on previous OSs and whether case-sensitive behavior can be forced. – MaQleod Oct 03 '12 at 17:16
  • I won't be able to provide a very full answer nowadays since I'm a huge Linux nerd now.. However I can offer the following. Windows Services for Unix utilizes the same filesystems as the operating system does, specifically, by not using the APIs that enable case insensitivity. See: http://support.microsoft.com/kb/817921 for info on how Case 'Preserving' is the same as Case 'Sensitive' however the common access layers allow for Case 'Ignorance' :) – whardier Oct 04 '12 at 18:18
  • You could say that windows is not case sensitive, but just case aware. That mean that it (windows) knows if letter is up case or lower case and it accepts both of them. It doesn't read one or the other as and error. – IGRACH Nov 17 '16 at 22:45