Выбрать все символы, которые нельзя использовать в имени файла в операционных окнах

Обновлено: 21.11.2024

У меня есть папка из 220+ ГБ резервных копий со старого ПК. Есть я не знаю, сколько файлов все с какими-то спецсимволами. Я пытаюсь сжать папку, но это не работает с этими специальными символами.

Я не хочу просматривать каждый файл, проверять каждое имя и удалять все специальные символы в папке размером более 200 ГБ.

Есть ли способ удалить все специальные символы или заменить их чем-то другим, не просматривая каждый отдельный файл?

Эта тема заблокирована. Вы можете подписаться на вопрос или проголосовать за него как полезный, но вы не можете отвечать в этой теме.

Сообщить о нарушении

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

Для этого определенно можно использовать утилиту PowerRename от PowerToys, хотя просмотр 220 ГБ файлов, несомненно, займет много-много времени.

Не зная, какие символы блокирует ваше программное обеспечение для сжатия, вы должны действовать очень осторожно. Вот пример; два файла в папке, которую я выбрал, имеют имена, содержащие å, ð и ó, которые могут быть за пределами гаммы, хотя Windows не возражает против них. Обратите внимание, что я выбрал Использовать регулярные выражения, что позволяет мне указывать шаблон, а не текст. Я выбрал шаблон

[^A-Za-z0-9-_]

Это просто означает "найти любой символ в имени файла, который не является (это то, что делает ^) одним из символов A-Z, a-z, 0-9, - (тире) или _ (подчеркивание)". Дефису должен предшествовать символ \ ("экранированный"), потому что в противном случае программа попытается интерпретировать его так же, как между буквами A и Z. Экранирование означает, что программа будет интерпретировать его буквально.

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

При использовании регулярных выражений необходимо выбрать

Сопоставить все вхождения. Я также решил проверить только часть имени файла ('Только имя элемента'), предполагая, что файлы имеют осмысленные, обычно используемые расширения, такие как doc или jpg.

Вы можете просмотреть результаты перед внесением изменений.

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

Сообщить о нарушении

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

Я пишу процедуру ввода/вывода имени файла на языке ассемблера x86-16. Он берет восемь символов (мне не нужно поддерживать длинные имена файлов) с клавиатуры и печатает их в поле ввода текста на экране.

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

Я бы хотел разрешить все разрешенные символы, но не могу найти официальный список запрещенных символов. Здравый смысл подсказывает мне, что косые черты незаконны, но если бы мне пришлось угадывать, я бы сказал, что символ плюса разрешен. (изменить: это не так!)

Я уже игнорирую символ точки, поскольку мой код автоматически обрабатывает добавление точки и расширения файла.

Попробуйте создать папку в Windows и поставьте '?' во имя. Подсказка сообщает вам, какие символы запрещены. Это дает вам начало :).

@Mixxiphoid, это не сработает, потому что набор разрешенных символов в Windows намного больше.Например, +,;[] , пробел и az разрешены в Windows, но не в DOS. Проводник выдает ошибку "Имя файла не может содержать ни один из следующих символов \ / : * ?" | который является лишь подмножеством запрещенных символов в DOS

@phuclv вот почему я сказал: «Это дает вам возможность начать», а также почему это комментарий, а не ответ.

4 ответа 4

Краткое изложение можно найти в Википедии:

А вот что официально сказано в руководстве пользователя MS-DOS 6

Это из PC-DOS 7:

  • Он может содержать не более восьми символов.
  • Он может состоять из букв от A до Z, цифр от 0 до 9 и следующих специальных символов:

  • Имя не может содержать пробелы, запятые, обратную косую черту или точки (кроме точки, которая отделяет имя от расширения).
  • Имя не может быть одним из следующих зарезервированных имен файлов: CLOCK$, CON, AUX, COM1, COM2, COM3, COM4, ​​LPT1, LPT2, LPT3, LPT4, NUL и PRN.
  • Имя не может совпадать с именем другого файла в каталоге.

Первый байт имени не должен быть 0x20 (пробел). Короткие имена или расширения дополняются пробелами. Специальные символы ASCII 0x22 ( " ), 0x2a ( * ), 0x2b ( + ), 0x2c ( , ), 0x2e ( . ), 0x2f ( / ), 0x3a ( : ), 0x3b ( ; ), 0x3c ( ), 0x3d ( = ), 0x3e ( > ), 0x3f ( ? ), 0x5b ( [ ), 0x5c ( \ ), 0x5d ( ] ), 0x7c ( | ) не допускаются.

У меня есть файлы, имена которых содержат двоеточие (например, 1d67c0d23e859ed4a259749e4a720d9e:default-sink). Когда я пытаюсь удалить их из командной строки с помощью команды:

Я получаю сообщение "Система не может найти указанный файл". для каждого файла. Если я укажу отдельный файл:

Я получаю сообщение "Неверный синтаксис имени файла, имени каталога или метки тома". Если я попытаюсь использовать rd в родительской папке, я получаю

Как я могу удалить эти файлы?

Эти файлы были созданы в разделе NTFS при загрузке Linux. Думаю, мне придется использовать загрузочный диск Linux, так как кажется, что Windows не любит двоеточие в именах файлов на уровне драйвера файловой системы.

14 ответов 14

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

Я обычно использую собственный метод API:

Знак : является зарезервированным в NTFS, для удаления таких файлов рекомендуется упомянутый выше собственный метод API.

Если имя файла содержит: как спрашивал OP, этот метод не работает. Используйте chkdsk или удалите его из работающего Linux.

Я думаю, вы можете попробовать имя 8.3?

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

Раньше был бесплатный инструмент под названием delinvfile, но они изменили его на условно-бесплатный/платный

Как я могу сделать это на томе NTFS, созданном с помощью команды форматирования с отключенной поддержкой имен 8.3?

@user2284570 этот метод не сработает. Когда я писал этот ответ, у Microsoft были включены имена 8.3, но в наши дни они отключены по умолчанию.

@Pacerier см. мой предыдущий комментарий. Этот метод не работает в современных операционных системах. Windows XP или старше.

Файлы с двоеточием в имени имеют пустые имена файлов 8.3, и из-за двоеточия их невозможно добавить.

Это сработало для меня:

  1. Запустил chkdsk /f
  2. Перезагрузил компьютер
  3. Затем я смог выбрать и удалить файл

Закройте все файлы, если они открыты, которые сохранены на диске, содержащем такие файлы. Теперь откройте свойства диска.

"Мой компьютер" -> "Щелкните правой кнопкой мыши на этом диске" > свойства

Затем перейдите на вкладку "Инструменты" и нажмите "Проверить сейчас" под меткой "Проверка ошибок".

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

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

С другой стороны, если вы используете Microsoft Word, вы можете подумать, что все знаки препинания заблокированы. Вот почему:

Нажмите, чтобы открыть полный размер

Когда вы сохраняете новый файл в Word, программа открывает диалоговое окно "Сохранить как" и вставляет начальный текст документа в качестве вероятного имени файла.Но Word обрезает этот текст при первом найденном знаке препинания. Другими словами, если ваш документ начинается с заголовка Путешествие пилигрима, Word предложит вам сохранить файл как Пилигрим, но вы не обязаны соглашаться с этим. Вы можете ввести или вставить полное имя с апострофом и сохранить файл.

Но вы по-прежнему не можете сохранить файл с одним из этих девяти символов. Почему?

Windows, как и DOS до нее, использует эти символы для поиска, инструкций командной строки и путей, определяющих расположение файлов. Например, сейчас я пишу в файле November Answer Line.docx в папке 1211, которая находится в папке Dropbox. , внутри Documents, внутри Lincoln, на моем диске D:. Полный путь к файлу, включая имя: D:LincolnDocumentsDropbox1211November Answer Line.docx.

Если бы я мог переименовать файл NovemberAnswer:Line.docx, Windows не узнала бы, является ли November папкой или частью имени файла. Чтобы избежать этой путаницы, ОС просто запрещает использование обратной косой черты () в именах файлов.

Честно говоря, мне бы хотелось, чтобы Microsoft была более строгой в отношении таких вещей и не позволяла нам использовать точки (.) в именах файлов.

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

Разработчикам вредоносного ПО нравится этот трюк. Еще в сентябре троянец Troj/Backdr-HG распространялся с помощью файла Microsoft-Services-Agreement.pdf.exe, который многим пользователям казался похожим на Microsoft-Services-Agreement.pdf.

Люди думали, что открывают PDF-файл, когда на самом деле запускали программу.

Читайте также: