Утилита для поиска файлов с недопустимыми символами в имени

Консольная утилита badfilenames.zip предназначена для поиска и автоматического переименования файлов, содержащих следующие недопустимые символы:

< (символ меньше)
> (символ больше)
: (двоеточие)
" (двойная кавычка)
/ (прямой слеш)
\ (обратный слеш)
| (вертикальная черта)
? (знак вопроса)
* (звёздочка)
и символы с кодами, лежащими в диапазоне 0..31

Откуда же берутся файлы, содержащие недопустимые символы в именах? Ведь средствами операционной системы Windows создание таких файлов невозможно - они запрещены на уровне API.

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

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

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


 Z:\>badfilenames.exe *

 111И~1.TXT  \111и?.txt
 222Е~1.TXT  \222е?.txt

 Scanned 16 files in 8 directories

 Z:\>

Здесь на экран выводится короткие имена файлов в формате 8.3. В этом же формате содержимое директории выводятся системной командой dir с параметром /x:


 Z:\>dir /x
  Volume in drive Z is RamDisk
  Volume Serial Number is 1234-5678

  Directory of Z:\

 01.01.2003  00:00    <DIR>                       TEMP
 15.12.2013  23:05            52 736 BADFIL~1.EXE badfilenames.exe
 08.12.2013  05:07            30 578 111И~1.TXT   111и?.txt
 08.12.2013  05:06            30 201 222Е~1.TXT   222е?.txt
                3 File(s)        113 515 bytes
                1 Dir(s)     334 450 688 bytes free

 Z:\>

Используя короткое имя файла, его можно переименовать командой rename:


 Z:\>rename 111И~1.TXT 111.txt

По умолчанию сканирование осуществляется в ASCII режиме, но если использовать ключ -u, то программа будет работать в режиме юникода:


 Z:\>badfilenames.exe -u z:

 z:\111и?.txt
 z:\222е?.txt

 Scanned 16 files in 8 directories

 Z:\>

Для чего введён этот юникод - режим? Дело в том, что в операционных системах Windows XP, Windows 7 и Windows 8 имеется возможность отключения создания коротких имён на разделе NTFS, и соответственно программа не сможет воспользоваться короткими именами для переименования. За это отвечает ключ регистра

HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreation

Если NtfsDisable8dot3NameCreation = 1, то при записи на раздел с файловой системой NTFS короткое имя файла не будет создано. Отключение этого параметра (NtfsDisable8dot3NameCreation = 0) позволяет исправить положение на будущее, но уже записанные на диск файлы всё равно не будут иметь коротких имён.

Автоматическое переименование выполняется с ключом -r или -ur (-urp) для юникодного режима. Пример использования утилиты:


 Z:\>badfilenames.exe -ur z:\*.*

 Renamed files: z:\111и?.txt --> z:\111й.txt
 Renamed files: z:\222е?.txt --> z:\222ё.txt
 Renamed files: z:\TEMP\111и?.txt --> z:\TEMP\111й.txt
 Renamed files: z:\TEMP\222е?.txt --> z:\TEMP\222ё.txt

 Scanned 20 files in 8 directories

 Z:\>badfilenames.exe -r z:\*.*

Здесь ключ -ur предписывает переименование из юникода в ASCII, использую кодовую страницу, установленную по умолчанию. Если кодировка кодовой страницы настроена неправильно, то можно использовать ключ -urp, здесь все юникод-символы заменяются на заглавные английские буквы A..Z:


 Z:\>badfilenames.exe -urp  z:\*.*

 Renamed files: z:\111и?.txt --> z:\111BH.txt
 Renamed files: z:\222е?.txt --> z:\222YJ.txt

 Scanned 23 files in 8 directories

 Z:\>

Такой режим (ключ -urp) рекомендуется использовать в том случае, если переименовать файл с нечитаемыми символами в имени другим путём невозможно.

Скачать утилиту можно здесь.
Download.

BACK