Консольная утилита 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) рекомендуется использовать в том случае, если переименовать файл с нечитаемыми символами в имени другим путём невозможно.