Jak sprawić, by system Windows 7 w pełni rozróżniał wielkość liter w odniesieniu do systemu plików?

37

Chcę, aby system Windows 7 rozróżniał wielkość liter, gdy odczytuje / zapisuje cokolwiek na dysku twardym (dysk C lub inny dysk NTFS).

Znalazłem wideo za pośrednictwem Google, które mówi, aby zmienić klucz rejestru

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

do wartości 1 ( źródło ).

Znalazłem również element obsługi systemu Windows, który mówi coś o modyfikowaniu klucza rejestru

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

co prowadzi mnie do założenia, że ​​podanie wartości 0 sprawi, że Windows rozróżni wielkość liter w systemach plików NTFS ( źródło ).

Mam wrażenie, że drugie rozwiązanie jest odpowiedzią, ale nie jestem pewien i nie chcę tego wypróbować bez pewności.

Czy ktoś wie na pewno, jaki jest właściwy sposób na rozróżnianie wielkości liter w systemie Windows 7 podczas odczytu / zapisu na dysku C (i na innym dysku NTFS)?

trusktr
źródło

Odpowiedzi:

25

Możesz ustawić HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitivewartość rejestru na 0sugerowaną przez innych autorów. Utwórz plik o add.regnastępującej treści i uruchom go.

Windows Registry Editor Version 5.00

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

Następnie użyj Cygwin do pracy z nazwami plików, w których rozróżniana jest wielkość liter.

Aby to zrobić, musisz zamontować systemy plików NTFS z posix=1opcją w swoim /etc/fstab, jak sugeruje ten artykuł . Oto fragment mojego 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

Po dokonaniu powyższych jest zrobione, będziesz w stanie radzić sobie z wielkość liter nazw korzystających bash, mc, gitetc.

Gitara basowa
źródło
6
Musisz ponownie uruchomić, aby to zadziałało.
William
2
@William: Uważam, że wystarczy zakończyć wszystkie procesy i usługi Cygwin (takie jak Apache , sshd itp.). To powinno wystarczyć, ponieważ cygwin1.dllzostanie wyładowane z pamięci RAM.
Bass
3
Mówię o HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive support.microsoft.com/en-us/kb/929110
William
16

Aby faktycznie utworzyć 2 pliki o tej samej nazwie, ale z różną wielkością liter w tym samym katalogu, musisz zainstalować Unix Services 3.5, ale działa to tylko w 32-bitowym systemie Windows. Następnie musisz uruchomić „C Shell”, aby utworzyć pliki. Nie można tworzyć plików za pomocą Eksploratora. Po utworzeniu Eksplorator nie gra z plikami. Jeśli zmienisz nazwę drugiego, kursor przeskoczy do pierwszego. Ponadto większość aplikacji może otwierać tylko jeden plik, ponieważ oczekują systemu plików bez rozróżniania wielkości liter. Jeśli korzystasz z wersji 64-bitowej, zainstaluj Cygwin i zmień na wielkość liter.

Próbowałem emulować system plików Linux z rozróżnianiem wielkości liter do celów debugowania podczas programowania. Wydaje się, że lepszym rozwiązaniem jest użycie VMWare z instancją Ubuntu do programowania.

użytkownik1491819
źródło
„używaj VMWare z instancją Ubuntu do programowania” => Nie dotyczy to gier
Петър Петров
16

Wszystkie te ustawienia, które można znaleźć w Internecie, dotyczą NFS, a nie NTFS (zauważ różnicę)!

NFS (Network File System) to protokół sieciowy.

W ten sposób zmiana klucza rejestru HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\obcaseinsensitive NIE zmieni niczego, co chcesz.

W systemie plików NTFS rozróżniana jest wielkość liter, ale interfejs API systemu Windows NIE , zapamiętuje tylko wielkość liter w nazwie. Oznacza to, że pomimo tego, że plik jest wyświetlany, ponieważ AbC.TXTnadal jest dostępny przez abc.txti aBc.TxT. Jest to ograniczenie systemu Windows, a nie NTFS.

Drugi HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\DontPrettyPathzasadniczo wyłącza normalizację starszych nazw plików 8.3 używanych przez DOS (wszystkie są wielkimi literami). Po włączeniu (domyślnie) ABC.TXTbędzie wyświetlany jako Abc.txt, ale nadal będzie dostępny dla wszystkich innych odmian.

Aby być bardziej dokładnym:

W rzeczywistości zależy to od oprogramowania, które uzyskuje dostęp do FS.

Jeśli używa interfejsu WIN32 API (co robi 99,9% oprogramowania), bez względu na to, co zrobisz, nie będzie uwzględniana wielkość liter. Całe wbudowane oprogramowanie w systemie Windows (takie jak Eksplorator, wiersz polecenia, Internet Explorer itp.) I całe oprogramowanie konsumenckie korzysta z WIN32 i zawsze rozróżnia wielkość liter.

Usługa NFS, Java i niektóre inne są POSIX i będą przestrzegać ustawienia rejestru „obcaseinsensitive”. Jednak wyłączenie tej opcji może powodować większe problemy, ponieważ to oprogramowanie może tworzyć pliki, które nie są dostępne z poziomu systemu Windows i innego oprogramowania Win32.

venimus
źródło
3
W rzeczywistości na poziomie FS przed dodatkowym przetwarzaniem jest rozróżniana wielkość liter, jednak NTFS tłumaczy wszystkie nazwy plików na wszystkie wielkie litery, a po wprowadzeniu jednej z małych liter tłumaczy ją na wielkie litery, a następnie wyszukuje wspomniany plik. (Patrz support.microsoft.com/ kb / 103657 )
Jeff F.
Masz rację. Próbowałem tylko wyjaśnić to prościej.
venimus
Więc w jaki sposób wersja Java oparta na Win32 udaje się znaleźć „SHORT.class” vs. „Short.class”, jeśli znajdują się w tym samym katalogu? Nie mogę uwierzyć, że NIE ma takiego wezwania.
Ira Baxter
Myślę, że ponieważ Java to POSIX
venimus
2
Jestem całkiem pewien, że standardowe środowisko uruchomieniowe Java (tj. Oracle) nie rozróżnia wielkości liter w systemie Windows. Jeśli starał się SHORT.classi Short.classw tym samym katalogu, to nie będzie działać. (Oczywiście, jeśli znajdują się w pliku .jar, nie ma problemu.)
Harry Johnston,
4

Myślę, że tego właśnie szukasz:

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

Ta strona zaleca ustawienie HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitivena 0, aby rozróżnić wielkość liter. Myślę, że już to znalazłeś i wygląda to na standardowy sposób (sugeruje to nawet znaleziony KB firmy Microsoft).

Wygląda na to, że musisz zmienić ustawienia jądra. Uważaj jednak na aktualizacje.

EDYCJA: Uważaj jednak, niektóre programy mogą zależeć od rozróżniania wielkości liter.

EDYCJA: Prawdopodobnie możesz użyć partycji UDF. W tym systemie plików rozróżniana jest wielkość liter i myślę, że działa zarówno w systemie Windows, jak i Linux.

Zobacz to i to .

beatgammit
źródło
Czy możesz zamieścić więcej informacji ze strony, do której prowadzi link. Nie kopiuj całości, ale możesz skopiować odpowiedni akapit i podsumować resztę.
ChrisF,
Cóż, cała strona to tylko akapit. Ale zrobię szybką edycję.
beatgammit
Dzięki tjameson. Jeśli chodzi o programy, które mogą zależeć od niewrażliwości na wielkość liter, jest to rzeczywiście duży problem. Program może szukać „WINDOWS” i nie może go znaleźć, ponieważ tak naprawdę jest to „Windows”, prawda? Strzelaj, nie potrafię wymyślić, jak skopiować rzeczy z Linuksa do Windowsa, i znalazłem się w sytuacji, w której foldery o tej samej pisowni z różnymi literami istnieją w jednym miejscu.
trusktr
Cóż, jedyne, co mogę wymyślić, to ręczne konflikty. Jeśli kopiujesz pliki, system Windows powinien zapytać, czy chcesz scalić, wykonać kopię czy coś. Nie pamiętam (sam jestem człowiekiem z linuksem).
beatgammit
Zgodnie z tym artykułem działa to tylko w przypadku podsystemów innych niż Win32, więc nie dotyczy NTFS.
harrymc,
4

Co Microsoft ma do powiedzenia na temat NTFS i zmiany wielkości liter.

Wygląda na to, że nie musisz zmieniać jądra, aby umożliwić wyszukiwanie z rozróżnianiem wielkości liter w sieci.

http://technet.microsoft.com/en-us/library/cc783185(WS.10).aspx

.

Konfigurowanie rozróżniania wielkości liter w nazwach plików i folderów

Dotyczy: Windows Server 2003 R2

Aby skonfigurować rozróżnianie wielkości liter w nazwach plików i folderów za pomocą interfejsu Windows Otwórz Usługi Microsoft dla sieciowego systemu plików: kliknij Start, wskaż Programy, wskaż Narzędzia administracyjne, a następnie kliknij Microsoft Services dla sieciowego systemu plików.

W razie potrzeby połącz się z komputerem, którym chcesz zarządzać.

Kliknij prawym przyciskiem myszy Serwer dla NFS, a następnie kliknij Właściwości.

Kliknij kartę Obsługa nazw plików.

Wykonaj jedną z następujących czynności:

Aby włączyć wyszukiwanie plików i katalogów z rozróżnianiem wielkości liter, zaznacz pole wyboru Włącz wyszukiwanie z rozróżnianiem wielkości liter.

Aby wyłączyć wyszukiwanie plików i katalogów z rozróżnianiem wielkości liter, usuń zaznaczenie pola wyboru Włącz wyszukiwanie z rozróżnianiem wielkości liter.

Kliknij Zastosuj.

Ważne Zmiany te zostaną wprowadzone dopiero po ponownym uruchomieniu serwera NFS. Aby uzyskać informacje dotyczące zatrzymywania i uruchamiania serwera NFS, zobacz Uruchamianie i zatrzymywanie serwera NFS. Musisz także wyłączyć rozróżnianie wielkości liter w jądrze systemu Windows, aby serwer dla systemu plików NFS obsługiwał nazwy plików z rozróżnianiem wielkości liter. Aby wyłączyć rozróżnianie wielkości liter w jądrze systemu Windows, można wyczyścić następujący klucz rejestru na 0: HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ jądro DWORD „obcaseinsensitive”

Aby skonfigurować rozróżnianie wielkości liter w nazwach plików i folderów za pomocą wiersza polecenia Otwórz wiersz polecenia.

Aby włączyć rozróżnianie wielkości liter, wpisz następujące polecenie:

nfsadmin server [nazwa_komputera] konfiguracja casesensitivelookups = tak

Aby wyłączyć rozróżnianie wielkości liter i opcjonalnie określić wielkość liter w nazwach zwracanych przez serwer dla systemu plików NFS, w wierszu polecenia wpisz następujące polecenie:

nfsadmin server [nazwa_komputera] konfiguracja casesensitivelookups = no [ntfscase = {Upper | niższe | zachować}]

Argument> Nazwa komputera = nazwa komputera, który chcesz skonfigurować.

Ważne Zmiany te zostaną wprowadzone dopiero po ponownym uruchomieniu serwera NFS. Aby uzyskać informacje dotyczące zatrzymywania i uruchamiania serwera NFS, zobacz Uruchamianie i zatrzymywanie serwera NFS.

Uwaga Opcja ntfscase ustawia rozróżnianie wielkości liter w systemie plików NTFS. Domyślna wielkość liter jest zachowana (zachowaj wielkość liter). Aby wyświetlić pełną składnię tego polecenia, w wierszu polecenia wpisz: nfsadmin server /?

.

Moab
źródło
1
Nie sądzę, że pozwala to na posiadanie wielu plików o tej samej nazwie, co chce zrobić.
beatgammit
1
Następnie będzie musiał wykonać hack rejestru.
Moab
Dotyczy: Windows Server 2008 R2
Behrouz.M
3

Stany Microsoft ;

W systemie plików NTFS nazwy zachowują wielkość liter, ale nie rozróżniają wielkości liter.
NTFS nie rozróżnia nazw plików na podstawie wielkości liter.

Zezwolenie na rozróżnianie wielkości liter w systemie Windows pozwoliłoby złośliwemu oprogramowaniu na tworzenie plików, do których użytkownik nie może uzyskać dostępu ani usunąć, więc nie jest to dozwolone z ważnych powodów.

W każdym razie jestem całkiem pewien, że jeśli udało Ci się rozróżnić wielkość liter w systemie plików NTFS, system Windows ulegnie awarii, a ponowna instalacja będzie jedynym rozwiązaniem.

harrymc
źródło
Masz również rację, że stanowi to problem bezpieczeństwa, jeśli to zrobisz. „Na przykład wersja edit.exe zainfekowana złośliwym programem typu koń trojański o nazwie EDIT.EXE może być przechowywana w tym samym katalogu co edit.exe. Gdyby użytkownik napisał edycję w wierszu polecenia systemu Windows , zamiast wersji standardowej można wykonać wersję konia trojańskiego (EDIT.EXE) „.. technet.microsoft.com/en-us/library/cc732389.aspx
Moab
Prawdopodobnie nie spowoduje awarii systemu Windows, chyba że zmienisz nazwę kluczowych plików / folderów. Jestem całkiem pewien, że Windows upewnia się, że używa prawidłowego przypadku, w rzeczywistości nawet go poleca.
beatgammit,
Hmm, to interesujące tjameson. Czy możesz podać link do tej rekomendacji?
trusktr
11
Jeśli złośliwe oprogramowanie uzyska dostęp do zapisu na dysku, masz duże problemy z tym, czy twój system plików rozróżnia małe i duże litery. #redherring
Leopd
3
Rejestr jest pełen odniesień do plików systemowych z niezwykle niespójnym wykorzystaniem przypadków. Rozróżnianie wielkości liter spowodowałoby ogromne pęknięcie.
kreemoweet