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


37

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

我通过Google找到了一段视频,说要更改注册表项

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\DontPrettyPath

值1(source)。

我还找到了一个Windows支持项目,其中提到了有关修改注册表项的内容

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\obcaseinsensitive

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

我觉得第二个解决方案是答案,但是我不确定,也不想不确定是否要尝试。

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

Answers:


25

您可以将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

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

为此,如本文所建议的那样,您需要posix=1在您的中使用option 挂载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

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


6
您必须重新启动才能生效。
威廉

2
@William:我相信您只需要终止所有Cygwin进程和服务(如Apachesshd等)。这样就足够了,因为cygwin1.dll它将从RAM中卸载。
巴斯

3
我说的是HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive support.microsoft.com/en-us/kb/929110
William

16

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

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


“使用VMware与Ubuntu发展的一个实例,” =>不是这样的与游戏
ПетърПетров

16

您可以在网上找到的所有这些设置都是针对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,它们将遵循“不区分大小写”的注册表设置。但是,关闭该选项实际上可能会给您带来更大的问题,因为此软件可以创建Windows本身和其他Win32软件无法访问的文件。


3
实际上,在FS级别上,在进行其他处理之前它是区分大小写的,但是NTFS会将所有文件名都转换为所有大写字母,当输入一个带有小写字母的字符时会将其翻译为大写字母然后查找该文件。(请参阅support.microsoft.com/ kb / 103657
杰夫·F。

你是对的。我只是想简单地解释一下。
venimus 2012年

那么,基于Win32的Java版本如何在同一目录中成功找到“ SHORT.class”和“ Short.class”呢?我不敢相信没有人这样做。
Ira Baxter 2014年

我认为是因为Java是POSIX
venimus 2014年

2
我相当肯定的是,标准的Java运行时(即,从Oracle)是区分大小写的Windows上。如果您尝试将SHORT.classShort.class放在同一目录中,则将无法使用。(当然,如果它们位于.jar文件中,就没有问题。)
哈里·约翰斯顿

4

我认为这是您要寻找的:

http://www.chilkatsoft.com/p/p_454.asp

此页面建议设置HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive为0以使其区分大小写。我认为您已经找到了,这看起来像是标准方法(甚至您发现的Microsoft KB都建议这样做)。

看来您必须更改内核设置。但是要当心更新。

编辑:不过请注意,某些程序可能取决于大小写不敏感。

编辑:您可能使用UDF分区。该文件系统区分大小写,我认为它可以在Windows和Linux上运行。

看到这个这个


您能否从链接到的页面上发布更多信息。不要复制整个内容,但是您可以复制相关段落并总结其余内容。
ChrisF 2011年

好吧,整个页面只是一个段落。不过,我将进行快速编辑。
beatgammit

谢谢杰姆森。对于可能取决于大小写不敏感的程序,这确实是一个大问题。程序可能会寻找“ WINDOWS”而找不到,因为它现在确实是“ Windows”,对吗?射击,我不知所措,试图弄清楚如何将内容从Linux复制到Windows,而且我发现自己处于一种情况,即同一位置的拼写相同的文件夹位于一个位置。
trusktr 2011年

好吧,我唯一能想到的就是手动冲突。如果复制文件,Windows应询问您是否要合并或进行复制或其他操作。我不记得了(我本人是Linux人)。
beatgammit

根据本文,这仅适用于非Win32子系统,因此不适用于NTFS。
harrymc

4

微软对NTFS和不断变化的大小写有何评价。

看起来您不必更改内核即可在网络上进行区分大小写的查找。

http://technet.microsoft.com/zh-CN/library/cc783185(WS.10).aspx

配置文件和文件夹名称的区分大小写

适用于:Windows Server 2003 R2

使用Windows界面为文件名和文件夹名配置区分大小写的方法打开Microsoft网络文件系统服务:单击开始,指向程序,指向管理工具,然后单击Microsoft网络文件系统服务。

如有必要,请连接到要管理的计算机。

用鼠标右键单击Server for NFS,然后单击属性。

单击文件名处理选项卡。

请执行以下任一操作:

若要启用区分大小写的文件和目录名称查找,请选中“启用区分大小写的查找”复选框。

若要禁用区分大小写的文件和目录名称查找,请清除“启用区分大小写的查找”复选框。

单击应用。

重要说明:重新启动Server for NFS后,这些更改才会生效。有关如何停止和启动NFS服务器的信息,请参阅启动和停止NFS服务器。您还需要禁用Windows内核不区分大小写,以使NFS服务器支持区分大小写的文件名。您可以通过将以下注册表项清除为0来禁用Windows内核不区分大小写:HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ kernel DWORD“ obcaseinsensitive”

使用命令行配置文件名和文件夹名区分大小写的步骤打开命令提示符。

要启用区分大小写,请键入以下内容:

nfsadmin服务器[ComputerName]配置区分大小写的lookups = yes

若要禁用区分大小写并有选择地指定Server for NFS返回的文件名的大小写,请在命令提示符下键入以下内容:

nfsadmin服务器[ComputerName] config casesensitivelookups = no [ntfscase = {upper | 降低| 保留}]

参数>计算机名称=要配置的计算机的名称。

重要说明:重新启动Server for NFS后,这些更改才会生效。有关如何停止和启动NFS服务器的信息,请参阅启动和停止NFS服务器。

注意ntfscase选项设置NTFS文件系统的区分大小写。默认的区分大小写是保留(保留大小写)。要查看此命令的完整语法,请在命令提示符下键入:nfsadmin server /?


1
我认为这不允许使用同名多个文件,这是他想要做的。
beatgammit

1
然后,他将不得不进行注册表修改。
摩押

适用于:Windows Server 2008 R2
Behrouz.M 2014年

3

微软声明 ;

在NTFS中,名称保留大小写,但不区分大小写。
NTFS不会根据大小写区分文件名。

在Windows下允许区分大小写将允许恶意软件创建用户无法访问或删除的文件,因此出于充分原因不允许这样做。

无论如何,我非常确定,如果设法使NTFS区分大小写,则Windows将会崩溃,并且重新安装将是唯一的解决方案。


您也这样做是正确的,它会带来安全问题。“例如,感染特洛伊木马型恶意程序的edit.exe版本名为EDIT.EXE,可以与edit.exe存储在同一目录中。如果用户要在Windows命令提示符下键入edit, ,特洛伊木马版本(EDIT.EXE)可能会执行而不是标准版” .. technet.microsoft.com/en-us/library/cc732389.aspx
摩押

除非您重命名密钥文件/文件夹,否则它可能不会使Windows崩溃。我非常确定Windows会确保使用正确的大小写,实际上,他们甚至推荐使用这种大小写。
beatgammit

嗯,这很有趣。您可以提供该建议的链接吗?
trusktr

11
如果恶意软件获得了对磁盘的写访问权限,则无论文件系统是否区分大小写,您都将遇到很大的问题。#redherring
Leopd 2012年

3
注册表中充斥着对系统文件的引用,这些案例的用法完全不一致。区分大小写会导致严重损坏。
kreemoweet 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.