Провідник Windows - чому at-character @ іноді заборонено в іменах?


6

Я знав багато обмежених та спеціальних символів у назвах файлів та папок, які неможливо використовувати, або вони можуть спричинити проблеми пізніше.

Наприклад, якщо поставити крапку в кінці імені, вона зникне.

У самого Explorer є більше обмежень, наприклад, крапку на початку імені файлу дуже важко поставити.

Гаразд, але що не так у підписі @!?
Я ніде не бачив жодних обмежень щодо цього, і зараз не міг його знайти.

Побачити:

1) Відкрийте Провідник Windows і створіть файл або папку з ім'ям 1,1
2) Натисніть F2 і перейменуйте його на @1,1
3) Бачите? Нове ім’я скасовано

Моє запитання: ЧОМУ?

Я перевірив цю "функцію" на XP, Win7 та Win10.
Забавно , що в WinXP, що перейменування 0,0на @0,0насправді перейменовує його @0.

Схоже, це внутрішня поведінка Explorer, тому що в консолі CMD це зробити чудово cd.>"@1,1"


Я просто спробував це в Windows 7, і я не можу відтворити ваш результат - я можу перейменувати файл із Explorer на ім’я, яке включає @, без проблем.
Скотт

@Scott, це якимось чином пов’язане із комою, ,особливо якщо після нього є число. @повинен бути першим персонажем. Ви спробували мій конкретний приклад? Хм, це також може залежати від локалі ... У мене є російська мова, де ,є роздільник для реальних чисел (1,5 означає 1 з половиною, а не 1,5 як в англійській мові).
aleksusklim

Я зробив зараз. Я взяв файл PNG і перейменував його на @0,0.png, а потім просто на звичайний @0,0. Я отримав попередження про зміну розширення, але коли натиснув ОК, перейменування спрацювало. (Я в США.)
Скотт

@Scott, Ну, я не можу створити @1,1.pngСхоже, що локаль пов'язаний. Ви спробували @1,1(оскільки @ 0,0 баггі лише для XP, у Win7 і пізніше він перейменовує чудово), чи, можливо, ви спробуєте @1.1? Не впевнений, що це покаже, щоправда.
aleksusklim

1
Ах, зараз я отримую дивні результати. Виходячи з 42 секунд тестування, схоже на спроби перейменувати, щоб @1,1мовчки вийти з ладу (залишивши назву незмінною).
Скотт

Відповіді:


8

Я не знаю, чому Explorer забороняє такі перейменування, але це, ймовірно, стосується функції локалізації.

Різні частини Провідника використовують @<DllName>,<ResourceID>синтаксис для динамічного завантаження локалізованого тексту - див. Перенаправлення рядка реєстру . (Зверніть увагу, що ідентифікатор ресурсу - це десяткове число, часто негативне.)

  • Наприклад, опис ярликів .lnk в Реєстрі є @shell32.dll,-4153, що означає "завантажити рядок з ідентифікатором -4153 з файлу shell32.dll". Оскільки файли DLL можуть мати окрему таблицю ресурсів для кожної підтримуваної мови, отриманий опис буде переведений на будь-яку мову відображення для Windows.

  • Так само ваш робочий стіл; Документи; Картинки; ... каталоги мають прихований desktop.iniфайл, що містить:

    [.ShellClassInfo]
    LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21769
    IconResource=%SystemRoot%\system32\imageres.dll,-183
    

    Коли Провідник бачить цей файл, він не буде просто показувати папку як «Робочий стіл» - він відображатиме перекладене ім’я.

Просте використання синтаксису перенаправлення у фактичному імені файлу / каталогу нічого не призведе, але я гадаю, що заборонялося запобігати різним помилкам у випадку, якщо програма якимось чином змішує імена "справжнього" та "відображення". (Наприклад, якщо ви назвали каталог @shell32.dll,-21769, можливо, що програма-помилка продовжує намагатися отримати доступ. DesktopНатомість це може навіть створити проблеми із безпекою.)

Таким чином, це було б схоже на різні інші імена, які дозволяє Windows, але Explorer не робить (наприклад, .fooщо є звичайним "прихованим файлом" для Unixen, але можна помилитися з безіменним файлом (лише для розширень) деякими програмами Windows).


3
О боже, справді! Чому я не думав про це. Гей, тепер я на самому справі намагався перейменувати test каталог , щоб @shell32.dll,-21769в WinXP провіднику, і це чарівно «перейменований в " його візуальне імені Рабочий стол( «Робочий стіл» на російській мові ) , який містить desktop.iniв LocalizedResourceName=@shell32.dll,-21769рядку. Коли я спробував перейменувати файл test - Провідник створений desktop.ini прямо тут з [LocalizedFileNames]і test=@shell32.dll,-21769. (Крім того, саме те, що "локалізоване ім'я", може бути настільки заплутаним для початківця користувача та може бути використане зловмисним програмним забезпеченням.
aleksusklim

Дякуємо за внесені зміни та уточнення. Отже, я думаю, я буду використовувати _@_замість файлу префікс або старий @_. Насправді це була моя схема іменування завантажених відеофайлів: іноді я роблю резервну копію відео, щоб я міг спокійно видалити його, щоб заощадити місце; але часто я не хочу його видаляти відразу, оскільки я ще не переглядав його. Отже, я вводив префікс @_ до імені файлу, щоб я міг легко відрізнити резервні копії. Нещодавно я знайшов файл, розмір якого був у назві, у формі на кшталт "Video (1,5 Gb) .mp4" - тоді моя схема не працює @_ Video (1,5 Gb).mp4.
aleksusklim
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.