Какие символы запрещены в именах каталогов Windows и Linux?

356

Я знаю, что / является незаконным в Linux, и следующие недопустимы в Windows (я думаю) * . " / \ [ ] : ; | ,

Что еще мне не хватает?

Однако мне нужно подробное руководство, учитывающее двухбайтовые символы. Связывание с внешними ресурсами хорошо для меня.

Мне нужно сначала создать каталог в файловой системе, используя имя, которое может содержать запрещенные символы, поэтому я планирую заменить эти символы подчеркиванием. Затем мне нужно записать этот каталог и его содержимое в zip-файл (с использованием Java), поэтому любые дополнительные советы, касающиеся имен zip-каталогов, будут оценены.

Джефф
источник
13
Некоторые персонажи, о которых вы упоминаете, на самом деле разрешены в Windows. Проверьте это:echo abc > "ab.;,=[1]"
Дольмен
3
Также не забывайте, что <и> запрещены в Windows.
AnotherParker
4
/ не запрещен в Linux. Вы просто должны уйти от него с помощью \ при наборе текста.
Дэвид С. Бишоп
5
@ DavidC.Bishop: Этот пост SO утверждает, что ядро ​​Linux не позволит вам работать с именем файла, содержащим косую черту. Вы смогли заставить это работать?
Сорен Бьорнстад
15
«/ не является незаконным в Linux. Вы просто должны избегать его с помощью \ при вводе» - это утверждение совершенно неверно. Компоненты имени файла не могут содержать /, и экранирование не имеет никакого эффекта.
Джим Балтер

Ответы:

216

«Полное руководство» по запрещенным символам имени файла не будет работать в Windows, поскольку оно резервирует имена файлов и символы. Да, такие символы, как * " ?и другие, запрещены, но существует бесконечное количество имен, состоящих только из допустимых символов, которые запрещены. Например, пробелы и точки являются допустимыми символами имени файла, но имена, состоящие только из этих символов, запрещены.

Windows не различает прописные и строчные буквы, поэтому вы не можете создать папку с именем, Aесли она aуже существует. Хуже того, вроде бы разрешенные имена, такие как PRNи CONмногие другие, зарезервированы и не разрешены. Windows также имеет несколько ограничений по длине; имя файла, допустимое в одной папке, может стать недействительным при перемещении в другую папку. Правила именования файлов и папок приведены в документации Microsoft.

Как правило, вы не можете использовать пользовательский текст для создания имен каталогов Windows. Если вы хотите , чтобы позволить пользователям имя все , что они хотят, вы должны создать безопасные имена , как A, AB, и A2др., Хранить пользовательские сгенерированные имена и их эквиваленты в пути файла данных приложения, а также выполнять отображение пути в приложении.

Если вам абсолютно необходимо разрешить сгенерированные пользователем имена папок, единственный способ определить, являются ли они недействительными, - это перехватить исключения и предположить, что имя недействительно. Даже это чревато опасностью, поскольку исключения, создаваемые для отказа в доступе, отключенных дисков и нехватки дискового пространства, пересекаются с теми, которые могут быть выброшены для недопустимых имен. Вы открываете одну огромную банку боли.

Dour High Arch
источник
11
Ключевая фраза из ссылки MSDN - «[и] любой другой символ, который целевая файловая система не разрешает». В Windows могут быть разные файловые системы. Некоторые могут разрешить Unicode, другие - нет. В общем, единственный безопасный способ проверить имя - это попробовать его на целевом устройстве.
Адриан Маккарти
72
Есть некоторые рекомендации, и «существует бесконечное количество имен, состоящих только из допустимых символов, которые запрещены» , не конструктивно. Точно так же «Windows не различает между прописными и строчными буквами» глупое исключение - OP спрашивает о синтаксисе , а не семантики, а не правых единомышленников не было бы сказать , что имя файла , как A.txtбыл недействительным , потому что a.TXTможет существовать.
Бородин
9
COPY CON PRNозначает чтение с ввода с клавиатуры или, возможно, стандартного ввода и копирование его на устройство принтера. Не уверен, что это все еще действует на современных окнах, но, безусловно, было в течение длительного времени. В старые времена вы могли использовать его для ввода текста, а матричный принтер просто выводил его.
AntonPiatek
6
«не конструктивно» - наоборот, это факт. Что неконструктивно, так это воинственность Бородина.
Джим Балтер
3
«В общем, вы не можете использовать пользовательский текст для создания имен каталогов Windows». <- Если вы хотите сделать это, вы можете просто создать белый список персонажей, и он будет в основном работать, если вы можете игнорировать уже существующую проблему.
Кейси
533

Давайте будем проще и ответим сначала на вопрос.

  1. Запрещенные печатные символы ASCII :

    • Linux / Unix:

      / (forward slash)
      
    • Окна:

      < (less than)
      > (greater than)
      : (colon - sometimes works, but is actually NTFS Alternate Data Streams)
      " (double quote)
      / (forward slash)
      \ (backslash)
      | (vertical bar or pipe)
      ? (question mark)
      * (asterisk)
      
  2. Непечатные символы

    Если ваши данные поступают из источника, который разрешает непечатные символы, есть еще что проверить.

    • Linux / Unix:

      0 (NULL byte)
      
    • Окна:

      0-31 (ASCII control characters)
      

    Примечание. Хотя в файловых системах Linux / Unix разрешено создавать файлы с управляющими символами в имени файла, пользователям может показаться кошмарным иметь дело с такими файлами .

  3. Зарезервированные имена файлов

    Следующие имена файлов зарезервированы:

    • Окна:

      CON, PRN, AUX, NUL 
      COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9
      LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9
      

      (как самостоятельно, так и с произвольными расширениями файлов, например LPT1.txt).

  4. Другие правила

    • Окна:

      Имена файлов не могут заканчиваться пробелом или точкой.

Кристофер Оезбек
источник
5
Большинство файловых систем Windows не ограничены 8-битными символами. Есть много других 8-битных символов (NUL, управляющие символы), которые запрещены в Windows. Даже рассмотрение этих вопросов не позволит спрашивающему «создать каталог в файловой системе», как он спросил, потому что существует бесконечное количество недопустимых имен каталогов, состоящих из незапрещенных символов.
Dour High Arch
38
Другие уже говорили это, и это не конструктивно. Когда я пришел сюда в поисках ответа, мне понадобился список, который я должен был собрать в другом месте: какие символы отфильтровывать из пользовательского ввода при создании удачной попытки ввести правильное имя файла. Вопрос, если символы вместе становятся недействительными, также может потребовать некоторой проработки.
Кристофер Оезбек
5
Символ NULL также запрещен в Linux.
Дэн Джонс
3
Новые строки не запрещены в Linux. Я бы сказал, что так и должно быть ... и если NUL запрещен в Linux, то он запрещен в Windows, он отвечает той же цели.
Алькаро
11
@ Соаку: конечно, нет, так как мир не вращается вокруг Microsoft. Зачем добавлять ненужные ограничения, когда есть только два символа, которые абсолютно необходимо запретить?
firegurafiku
68

В Linux и других Unix-системах есть только два символа, которые не могут появиться в имени файла или каталога, и это NUL '\0'и косая черта '/'. Разумеется, косая черта может появляться в имени пути, разделяющем компоненты каталога.

Слух 1 гласит, что Стивен Борн (из «оболочки» славы) был каталог , содержащий 254 файлов, по одному для каждой буквы (код символа) , который может появиться в имени файла ( за исключением /, '\0'; имя .было текущим, конечно ). Он использовался для тестирования оболочки Bourne и регулярно наносил ущерб неосторожным программам, таким как программы резервного копирования.

Другие люди рассмотрели правила Windows.

Обратите внимание, что MacOS X имеет регистронезависимую файловую систему.


1 Керниган и Пайк из «Практики программирования» так и сказали в главе 6 «Тестирование», §6.5 Стресс-тесты:

Когда Стив Борн писал свою оболочку Unix (известную как оболочка Борна), он создал каталог из 254 файлов с односимвольными именами, по одному на каждое значение байта, кроме '\0'и косой черты, двух символов, которые не могут появиться в Unix имена файлов. Он использовал этот каталог для всевозможных тестов сопоставления с образцом и токенизации. (Тестовый каталог, конечно, был создан программой.) В течение многих лет этот каталог был проклятием программ для обхода файловых деревьев; он испытал их на разрушение.

Обратите внимание, что каталог должен содержать записи .и .., следовательно, это было, вероятно, 253 файла (и 2 каталога) или 255 записей имени, а не 254 файла. Это не влияет на эффективность анекдота или тщательное тестирование, которое он описывает.

Джонатан Леффлер
источник
1
254 файла? А что насчет utf8?
j_kubik
20
Все 254 файла были односимвольными именами файлов, по одному на символ, что было разрешено в имени файла. UTF-8 не был даже проблеском в глазах, когда Стив Борн написал оболочку Борна. UTF-8 налагает правила относительно допустимых последовательностей байтов (и запрещает байты 0xC0, 0xC1, 0xF5-0xFF в целом). В остальном, это не сильно отличается - на уровне деталей, которые я обсуждаю.
Джонатан Леффлер
1
Разделитель каталогов на диске для файловых систем MacOS HFS + на самом деле представляет собой «:», а не «/». ОС обычно (вероятно, всегда) делает правильные вещи, когда вы работаете с * nix API. Но не ожидайте, что это произойдет надежно, если вы переходите в мир OSX, например, с appleScript. Похоже, что API-интерфейсы Какао тоже используют / и скрывают: от вас, но я уверен, что старые API-интерфейсы Carbon этого не делают.
Дэн Притц
@DanPritts Я создал собственную шрифт / цветовую схему в настройках XCode, назвав ее /в названии. Это вызвало некоторые проблемы, так как он создал новый каталог со схемой.
Andreas
Обратите внимание, что если в имени каталога есть двоеточие, вы не можете добавить каталог в PATHпеременную Unix, поскольку в качестве разделителя используется двоеточие (точка с запятой в Windows). Таким образом, программы в таком каталоге должны выполняться либо с путем, который указывает, где он находится (может быть относительным или абсолютным), либо вы должны находиться в каталоге и иметь точку ( .текущий каталог), в PATHкоторой это широко рассматривается как небезопасно.
Джонатан Леффлер
36

Вместо того, чтобы создавать черный список символов, вы можете использовать белый список . Учитывая все это, диапазон символов, который имеет смысл в контексте имен файлов или каталогов, довольно мал, и если у вас нет особых требований к именованию, ваши пользователи не будут применять его к вашему приложению, если они не смогут использовать всю таблицу ASCII.

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

В этом духе это ряд символов, которые можно считать безопасными:

  • Буквы (az AZ) - также символы Юникода, если необходимо
  • Цифры (0-9)
  • Подчеркивать (_)
  • Дефис (-)
  • Космос
  • Точка (.)

И любые дополнительные безопасные символы, которые вы хотите разрешить. Помимо этого, вы просто должны применить некоторые дополнительные правила, касающиеся пробелов и точек . Этого обычно достаточно:

  • Имя должно содержать хотя бы одну букву или цифру (чтобы избежать только точек / пробелов)
  • Имя должно начинаться с буквы или цифры (чтобы избежать начальных точек / пробелов)
  • Имя не может заканчиваться точкой или пробелом (просто обрежьте их, если они есть, как в Проводнике)

Это уже позволяет довольно сложные и бессмысленные имена. Например, эти имена будут возможны с этими правилами, и будут действительными именами файлов в Windows / Linux:

  • A...........ext
  • B -.- .ext

По сути, даже с таким количеством символов в белом списке вы все равно должны решить, что на самом деле имеет смысл, и соответствующим образом проверить / скорректировать имя. В одном из моих приложений я использовал те же правила, что и выше, но удалил дублирующиеся точки и пробелы.

AeonOfTime
источник
15
А как насчет моих не говорящих по-английски пользователей, которые бы все облажались?
пк
2
@pkh: Как я уже упоминал в своем посте, вы должны включить в свой белый список любые необходимые символы Юникода. Диапазоны символов обычно можно указать довольно легко, особенно если вы используете, например, регулярные выражения.
AeonOfTime
2
Мы используем подход белого списка, но не забывайте, что в Windows вы должны управлять зарезервированными, независимыми от регистра строками, такими как имена устройств (prn, lpt1, con) и. и ..
Тахоар
2
Вы пропустили ограничение Windows: не должно заканчиваться точкой или пробелом.
Мартин Боннер поддерживает Монику
1
«Учитывая все обстоятельства, диапазон символов, которые имеют смысл в контексте имени файла или каталога, довольно короткий». Возможно для некоторых случаев использования. Сейчас я работаю над проектом, включающим мультимедийные файлы на 20 языках, и имена файлов должны отражать заголовок элемента мультимедиа, потому что конечные пользователи будут находить контент таким образом. Многие имена используют знаки препинания. Любое ограничение на символы имени файла несет цену, поэтому в этом случае мы должны минимизировать ограничения. В этом случае диапазон символов, которые не имеют смысла в имени файла, намного короче и проще, чем те, которые имеют.
LarsH
29

Самый простой способ получить ответ от Windows - это попытаться переименовать файл через Проводник и ввести / для нового имени. Windows выдаст сообщение о недопустимых символах.

A filename cannot contain any of the following characters:
    \ / : * ? " < > | 

https://support.microsoft.com/en-us/kb/177506

chrisjej
источник
28

Ну, если только для исследовательских целей, тогда вам лучше всего взглянуть на эту запись в Википедии об именах файлов .

Если вы хотите написать переносную функцию для проверки ввода пользователя и создания имен файлов на основе этого, краткий ответ - нет . Взгляните на переносимый модуль, такой как Perl File :: Spec, чтобы увидеть все прыжки, необходимые для выполнения такой «простой» задачи.

Леонардо Эррера
источник
5

Для Windows вы можете проверить это с помощью PowerShell

$PathInvalidChars = [System.IO.Path]::GetInvalidPathChars() #36 chars

Для отображения кодов UTF-8 вы можете конвертировать

$enc = [system.Text.Encoding]::UTF8
$PathInvalidChars | foreach { $enc.GetBytes($_) }

$FileNameInvalidChars = [System.IO.Path]::GetInvalidFileNameChars() #41 chars

$FileOnlyInvalidChars = @(':', '*', '?', '\', '/') #5 chars - as a difference
Войцех Sciesinski
источник
Для тех, кто не говорит на PowershelI, $ FileNameInvalidChars составляет от 0x00 до 0x1F и: "<> | *? \ /
Робин Дэвис,
4

В Windows 10 (2019) следующие символы запрещены ошибкой при попытке их набрать:

Имя файла не может содержать следующие символы:

\ / : * ? " < > |

Брет Камерон
источник
3

Вот реализация ac # для окон, основанная на ответе Кристофера Оезбека

Он был сделан более сложным с помощью логического метода containsFolder, но, надеюсь, охватывает все

/// <summary>
/// This will replace invalid chars with underscores, there are also some reserved words that it adds underscore to
/// </summary>
/// <remarks>
/// /programming/1976007/what-characters-are-forbidden-in-windows-and-linux-directory-names
/// </remarks>
/// <param name="containsFolder">Pass in true if filename represents a folder\file (passing true will allow slash)</param>
public static string EscapeFilename_Windows(string filename, bool containsFolder = false)
{
    StringBuilder builder = new StringBuilder(filename.Length + 12);

    int index = 0;

    // Allow colon if it's part of the drive letter
    if (containsFolder)
    {
        Match match = Regex.Match(filename, @"^\s*[A-Z]:\\", RegexOptions.IgnoreCase);
        if (match.Success)
        {
            builder.Append(match.Value);
            index = match.Length;
        }
    }

    // Character substitutions
    for (int cntr = index; cntr < filename.Length; cntr++)
    {
        char c = filename[cntr];

        switch (c)
        {
            case '\u0000':
            case '\u0001':
            case '\u0002':
            case '\u0003':
            case '\u0004':
            case '\u0005':
            case '\u0006':
            case '\u0007':
            case '\u0008':
            case '\u0009':
            case '\u000A':
            case '\u000B':
            case '\u000C':
            case '\u000D':
            case '\u000E':
            case '\u000F':
            case '\u0010':
            case '\u0011':
            case '\u0012':
            case '\u0013':
            case '\u0014':
            case '\u0015':
            case '\u0016':
            case '\u0017':
            case '\u0018':
            case '\u0019':
            case '\u001A':
            case '\u001B':
            case '\u001C':
            case '\u001D':
            case '\u001E':
            case '\u001F':

            case '<':
            case '>':
            case ':':
            case '"':
            case '/':
            case '|':
            case '?':
            case '*':
                builder.Append('_');
                break;

            case '\\':
                builder.Append(containsFolder ? c : '_');
                break;

            default:
                builder.Append(c);
                break;
        }
    }

    string built = builder.ToString();

    if (built == "")
    {
        return "_";
    }

    if (built.EndsWith(" ") || built.EndsWith("."))
    {
        built = built.Substring(0, built.Length - 1) + "_";
    }

    // These are reserved names, in either the folder or file name, but they are fine if following a dot
    // CON, PRN, AUX, NUL, COM0 .. COM9, LPT0 .. LPT9
    builder = new StringBuilder(built.Length + 12);
    index = 0;
    foreach (Match match in Regex.Matches(built, @"(^|\\)\s*(?<bad>CON|PRN|AUX|NUL|COM\d|LPT\d)\s*(\.|\\|$)", RegexOptions.IgnoreCase))
    {
        Group group = match.Groups["bad"];
        if (group.Index > index)
        {
            builder.Append(built.Substring(index, match.Index - index + 1));
        }

        builder.Append(group.Value);
        builder.Append("_");        // putting an underscore after this keyword is enough to make it acceptable

        index = group.Index + group.Length;
    }

    if (index == 0)
    {
        return built;
    }

    if (index < built.Length - 1)
    {
        builder.Append(built.Substring(index));
    }

    return builder.ToString();
}
Чарли Рикс
источник
У меня есть три вопроса: 1. Почему вы инициализировали StringBuilderс начальным значением емкости? 2. Почему вы добавили 12 к длине filename? 3. Было ли выбрано 12 произвольно или за этим числом была какая-то мысль?
Ииминов
2

По состоянию на 18/04/2017 среди простых ответов на эту тему нет простого черного или белого списка символов и имен файлов - и ответов много.

Лучшее предложение, которое я мог придумать, состояло в том, чтобы позволить пользователю называть файл так, как ему нравится. Используя обработчик ошибок, когда приложение пытается сохранить файл, перехватите все исключения, предположите, что виновато имя файла (очевидно, после того, как убедитесь, что путь сохранения тоже был в порядке), и запросите у пользователя новое имя файла. Для достижения наилучших результатов поместите эту процедуру проверки в цикл, который продолжается до тех пор, пока пользователь не поймет это правильно или не сдается. Лучше всего сработало для меня (по крайней мере, в VBA).

FCastro
источник
1
Ваш ответ @FCastro правильный с технической точки зрения. Однако с точки зрения UX это кошмар - пользователь вынужден играть в игру типа «набери что-нибудь, и я скажу тебе, если у тебя получится» снова и снова. Я бы предпочел увидеть сообщение (стиль предупреждения), сообщающее пользователю, что он ввел недопустимый символ, который позже будет преобразован.
Майк
Кристофер Оезбек представил такой черный список в 2015 году.
Джим Балтер
1

Хотя единственные недопустимые символы Unix могут быть /и NULL, хотя следует учитывать некоторые аспекты интерпретации командной строки.

Например, хотя имя файла 1>&2или 2>&1Unix может быть законным , такие имена файлов могут быть неверно истолкованы при использовании в командной строке.

Точно так же можно было бы назвать файл $PATH, но при попытке доступа к нему из командной строки оболочка преобразуется $PATHв значение переменной.

Догг Букинс
источник
литералы в BASH, лучший способ я нашел , чтобы объявить литералы без интерполяции $'myvalueis', например: $ echo 'hi' > $'2>&1', cat 2\>\&1«привет»
ThorSummoner
1

Трудности с определением, что законно, а что нет, уже были рассмотрены, и были предложены белые списки . Но Windows поддерживает более чем 8-битные символы. Википедия утверждает , что (например)

двоеточие модификатора двоеточие [( см. ниже 7. )) иногда используется в именах файлов Windows, поскольку оно идентично двоеточию в шрифте Segoe UI, используемом для имен файлов. Само по себе [унаследованное ASCII] двоеточие не допускается.

Поэтому я хочу представить гораздо более либеральный подход с использованием символов Unicode вместо «нелегальных». Я нашел результат в моем сопоставимом сценарии использования гораздо более читабельным. Посмотрите, например, в этот блок . Плюс вы можете даже восстановить оригинальный контент из этого. Возможные варианты и исследования представлены в следующем списке:

  1. Вместо *( U+002A * ASTERISK) вы можете использовать один из множества перечисленных, например, U+2217 ∗ (ASTERISK OPERATOR)илиFull Width Asterisk U+FF0A *
  2. Вместо ., вы можете использовать один из них , например,⋅ U+22C5 dot operator
  3. Вместо этого "вы можете использовать “ U+201C english leftdoublequotemark(альтернативы см. Здесь )
  4. Вместо /( / SOLIDUS U+002F) вы можете использовать ∕ DIVISION SLASH U+2215(другие здесь )
  5. Вместо \( \ U+005C Reverse solidus) вы можете использовать ⧵ U+29F5 Reverse solidus operator( больше )
  6. Вместо [( U+005B Left square bracket) и ]( U+005D Right square bracket) вы можете использовать, например, U+FF3B[ FULLWIDTH LEFT SQUARE BRACKETи U+FF3D ]FULLWIDTH RIGHT SQUARE BRACKET( отсюда , больше возможностей здесь )
  7. Вместо этого :вы можете использовать U+2236 ∶ RATIO (for mathematical usage)или U+A789 ꞉ MODIFIER LETTER COLON(см. Двоеточие (буква) , иногда используемое в именах файлов Windows, поскольку оно идентично двоеточию в шрифте Segoe UI, используемом для имен файлов. Сам двоеточие не разрешено) (см. Здесь )
  8. Вместо ;, вы можете использовать U+037E ; GREEK QUESTION MARK(см. Здесь )
  9. Для |, есть некоторые хорошие заменители , такие как: U+0964 । DEVANAGARI DANDA, U+2223 ∣ DIVIDESили U+01C0 ǀ LATIN LETTER DENTAL CLICK( Википедия ). Также символы рисования коробки содержат различные другие опции.
  10. Вместо ,( , U+002C COMMA) вы можете использовать, например ‚ U+201A SINGLE LOW-9 QUOTATION MARK(см. Здесь )
  11. Для ?( U+003F ? QUESTION MARK), они являются хорошими кандидатами: U+FF1F ? FULLWIDTH QUESTION MARKили U+FE56 ﹖ SMALL QUESTION MARK(от него повторно , два больше от Дингбаты блока , поиск «вопрос»)
Cadoiz
источник
0

При создании ярлыков Интернета в Windows для создания имени файла пропускаются недопустимые символы, кроме косой черты, которая преобразуется в минус.

Матиас Ронге
источник
3
«не ответ ... отказался - модератор проверил ваш флаг, но не нашел доказательств в его поддержку». Ты меня разыгрываешь. Лучше модераторы, пожалуйста.
Джим Балтер
-1

В оболочках Unix вы можете заключать в кавычки практически всех символов '. За исключением самой одиночной кавычки, и вы не можете выразить управляющие символы, потому что \не раскрывается. Доступ к самой одиночной кавычке из строки в кавычках возможен, потому что вы можете объединять строки с одинарными и двойными кавычками, например, 'I'"'"'m'которые можно использовать для доступа к файлу с именем "I'm"(двойная кавычка также возможна здесь).

Поэтому вам следует избегать всех управляющих символов, поскольку их слишком сложно ввести в оболочку. Остальное по-прежнему забавно, особенно файлы, начинающиеся с тире, потому что большинство команд считывают их как опции, если у вас нет двух тире --раньше или вы не указали их ./, что также скрывает начало -.

Если вы хотите быть милым, не используйте никаких символов, которые оболочка и типичные команды используют в качестве синтаксических элементов, иногда зависящих от позиции, так что, например, вы все еще можете использовать -, но не как первый символ; То же самое ., вы можете использовать его в качестве первого символа только тогда, когда вы имеете в виду («скрытый файл»). Когда вы имеете в виду, ваши имена файлов являются escape-последовательностями VT100 ;-), так что ls искажает вывод.

forthy42
источник
Вопрос не в снарядах.
Джим Балтер
-8

У меня была такая же потребность, я искал рекомендации или стандартные ссылки и наткнулся на эту ветку. Мой текущий черный список символов, которых следует избегать в именах файлов и каталогов:

$CharactersInvalidForFileName = {
    "pound" -> "#",
    "left angle bracket" -> "<",
    "dollar sign" -> "$",
    "plus sign" -> "+",
    "percent" -> "%",
    "right angle bracket" -> ">",
    "exclamation point" -> "!",
    "backtick" -> "`",
    "ampersand" -> "&",
    "asterisk" -> "*",
    "single quotes" -> "“",
    "pipe" -> "|",
    "left bracket" -> "{",
    "question mark" -> "?",
    "double quotes" -> "”",
    "equal sign" -> "=",
    "right bracket" -> "}",
    "forward slash" -> "/",
    "colon" -> ":",
    "back slash" -> "\\",
    "lank spaces" -> "b",
    "at sign" -> "@"
};
Мэн Лу
источник
4
Вы не могли бы прокомментировать наличие @в списке?
PypeBros
8
Вопрос заключался в том, какие символы являются незаконными. Большинство символов в вашем списке являются законными.
Найджел
6
письмо b? лол, я предполагаю, что это b из lank spaces... ну, это все еще оставляет немного ... Я переименовал картинку, (),-.;[]^_~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ.jpgно пришлось изменить ее обратно, потому что она выглядела злой ...
ashleedawg