您如何使 Windows 7 对文件系统完全区分大小写?

tru*_*ktr 40 windows windows-7 ntfs filesystems

我想让 Windows 7 在硬盘驱动器(C 驱动器或任何其他 NTFS 驱动器)上读取/写入任何内容时区分大小写。

我通过谷歌找到了一个视频,说要更改注册表项

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\DontPrettyPath
Run Code Online (Sandbox Code Playgroud)

值为 1 ( source )。

我还发现了一个 Windows 支持项目,其中说明了有关修改注册表项的内容

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\obcaseinsensitive
Run Code Online (Sandbox Code Playgroud)

这让我假设将值设为 0 将使 Windows 对 NTFS 文件系统(源代码)区分大小写。

我有一种感觉,第二种解决方案就是答案,但我不确定,我不想在不确定的情况下尝试。

有谁确定在读取/写入 C 驱动器(和任何其他 NTFS 驱动器)时使 Windows 7 区分大小写的正确方法是什么?

Bas*_*ass 29

您可以按照其他作者的建议将HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive注册表值设置0为。创建一个以add.reg以下内容命名的文件并运行它。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel]
"obcaseinsensitive"=dword:00000000
Run Code Online (Sandbox Code Playgroud)

然后使用Cygwin处理区分大小写的文件名。

为此,您需要按照本文的建议posix=1在您的 中使用选项挂载 NTFS 文件系统。这是我的一个片段:/etc/fstabfstab

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
Run Code Online (Sandbox Code Playgroud)

一旦上述完成后,你就可以对付使用区分大小写的文件名bashmcgit等。

  • 您必须重新启动才能生效。 (7认同)
  • 我说的是`HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive` https://support.microsoft.com/en-us/kb/929110 (3认同)
  • @William:我相信您只需要终止所有 *Cygwin* 进程和服务(例如 *Apache*、*sshd* 等)。这应该足够了,因为`cygwin1.dll` 将从 RAM 中卸载。 (2认同)

ven*_*mus 17

您可以在网络上找到的所有这些设置都是针对NFS 的,而不是针对NTFS 的(注意区别)!

NFS(网络文件系统)是一种网络协议。

因此,更改注册表项HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\obcaseinsensitive 不会更改您想要的任何内容。

NTFS 区分大小写,Windows API 不区分大小写,它只记住文件名大小写。这意味着尽管您的文件显示为AbC.TXT仍然可以通过abc.txt和访问aBc.TxT。这是 Windows 的限制,而不是 NTFS。

另一个HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\DontPrettyPath基本上关闭了 DOS 使用的旧版 8.3 文件名(全部大写)的规范化。当它打开时(默认)ABC.TXT将显示为Abc.txt,但所有其他变体仍然可以访问。

更准确地说:

实际上这取决于访问FS的软件。

如果它使用 WIN32 API(99.9% 的软件都这样做),无论你做什么,它都不区分大小写。Windows 中的所有内置软件(如资源管理器、命令提示符、Internet Explorer 等)和所有消费者软件都使用 WIN32,并且始终不区分大小写。

NFS 服务、Java 和其他一些是 POSIX,它们将遵守 'obcaseinsensitive' 注册表设置。然而,关闭该选项实际上可能会给您带来更大的问题,因为该软件可以创建无法从 Windows 本身和其他 Win32 软件访问的文件。

  • 实际上,在附加处理之前的 FS 级别上,它区分大小写,但是,NTFS 将所有文件名转换为全部大写,当输入带有小写字符的文件名时,将其转换为大写,然后查找所述文件。(请参阅 http://support. microsoft.com/kb/103657) (3认同)
  • 我相当确定标准 Java 运行时(即来自 Oracle)在 Windows 上是**不**不区分大小写的。如果你试图将 `SHORT.class` 和 `Short.class` 放在同一个目录中,它不会工作。(当然,如果它们在 .jar 文件中,则没有问题。) (2认同)

use*_*819 16

为了在同一目录中实际创建 2 个名称相同但大小写不同的文件,您需要安装 Unix Services 3.5 但这仅适用于 32 位 Windows。然后您需要运行“C Shell”来创建文件。您无法通过资源管理器创建文件。一旦创建,资源管理器就不能很好地处理这些文件。如果你去重命名第二个,光标会跳到第一个。此外,大多数应用程序只能打开其中一个文件,因为它们希望文件系统不区分大小写。如果您使用的是 64 位,请安装 Cygwin 并将其更改为区分大小写。

我试图在开发过程中模拟 Linux 区分大小写的文件系统以进行调试。似乎更好的方法是使用带有 Ubuntu 实例的 VMWare 进行开发。