Как переименовать файл с запрещенными символами
Для переименования файлов отметьте их и выберите опцию меню Инструменты — Переименование файлов .

Можно переименовывать файлы с использованием данных любых тегов.
Выберите необходимый тег в сетках Тип и Тег и нажмите кнопку Ввести. Наименование тега появится в Списке тегов. Повторите это необходимое количество раз. Для удаления тега из списка выберите его и нажмите кнопку Удалить.
Раскрывающийся список и поле Префикс содержат данные которые помещаются перед именем файла.
Раскрывающийся список и поле Суффикс содержат данные которые помещаются после имени файла.
Префикс и суффикс могут отсутствовать (None), быть исходным именем файла или содержать строку любых символов, которые допустимы в именах файлов.
Раскрывающийся список Символ-разделитель между тегами определяет символ, который отделяет данные различных тегов друг от друга.
РРаскрывающийся список Замена запрещённых символов определяет символ, который заменяет в имени файла символы, которые содержатся в данных тега, но не допускаются в именах файлов.
Дерево файлов и сетка Файлы содержит текущие и новые имена файлов.
Перед запуском данного окна необходимо отметить необходимые файлы на закладке Проект главного окна.
Если данные тегов различных файлов одинаковы в одном и том же каталоге и, соответственно, одинаковы имена файлов, то к новому имени файла добавляется порядковый номер в скобках.
Недопустимые символы в именах файлов:
Для переименования файлов нажмите кнопку OK. Будут переименованы все отмеченные файлы, содержащие выбранные теги.
Как переименовать файл, папку, ярлык в Windows
В Виндовс всё просто! Мы уже умеем создавать ярлыки, а также и папки создавать тоже умеем. Но жизнь всегда преподносит неожиданные сюрпризы и приходится что-то менять, чтобы жить дальше. Чаще всего при работе с файловой системой требуется не только что-то создавать, но и видоизменять. Например, нужно поменять название папки или файла. Об этом и будет рассказано ниже: как переименовать файл, папку, ярлык в Windows.
Файлы, папки, ярлыки в Windows
Итак, есть у нас папки, файлы (и даже где-то ярлыки).

Выделение файла в Windows для его переименования.
Для того, чтобы переименовать файл (папку или ярлык), первым делом нужно его выделить. Для этого кликаем левой кнопкой мыши по нему! И он становится выделенным! 🙂

Переименование файла в Windows
После небольшой паузы (достаточно длинной, чтобы не получилось двойного клика) ещё раз кликаем в название файла, папки или ярлыка. И вот оно! Теперь можно исправить имя файла! Если включен режим показа расширений файлов, то выделяется имя файла до расширения. С клавиатуры вводим новое имя файла, нажимаем Enter или просто кликаем мышкой в любое другое место на мониторе, и файл переименован!

Переименование папки в Windows
Таким же точно способом производится переименование папок:

Переименование ярлыка (ссылки) в Windows
Ярлыки с такой же лёгкостью подвержены смене названий, если очень надо. Однако, в отличие от имени файла, при переименовании выделяется всё имя ярлыка целиком (что не мешает его переименовывать).

Запрещённые символы Windows
Важно знать, что не все символы можно использовать при названии файлов!
В Windows есть запрещённые символы в именах фалов и папок.
При попытке переименовать или создать файл/папку с запрещёнными символами будет выдано предупреждение, а переименование не произойдёт.

Второй способ переименования файла в Windows
Есть более сложный (в плане того, сколько придётся елозить мышкой по столу) способ:
- Кликаем по файлу правой кнопкой мыши.
- Из контекстного меню выбираем «Переименовать» левой кнопкой мыши.
- Дальше всё тоже самое: переименовываем.

Есть ещё более длинные способы, чтобы переименовать файл, папку, ярлык в Windows. Но, думаю, что этих двух, будет вполне достаточно. 🙂
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! 😉
Утилита для поиска файлов с недопустимыми символами в имени
Консольная утилита 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 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) рекомендуется использовать в том случае, если переименовать файл с нечитаемыми символами в имени другим путём невозможно.
Как переименовать файл с запрещенными символами
Покинул форум
Сообщений всего: 56
Дата рег-ции: Март 2010
Помог: 0 раз(а)
Здравствуйте, для файлового менедежра встал вопрос о реализации проверки корректности ввода пользователем новой директории.
Нуж но составить регулярку, но перед этим хотелось бы ничего не упустить.
Запрет на:
— точка в начале
— пробелы в начале и в конце
— знаки / и \
— знак %
— имя не меньше 1 символа
При этом хотелось бы учесть возможность использования как кирилицы так и латиницы, а также цифр конечно же.
Подскажите может я что упустил?
Отправлено: 11 Июля, 2010 — 16:46:09
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009
Откуда: Россия, Санкт-Петербург
Помог: 617 раз(а)
зачем регулярка? basename , strlen и strpos (если вам так % и точка не нравятся, хотя это полностью нормальные символы)
Отправлено: 11 Июля, 2010 — 16:54:27
Покинул форум
Сообщений всего: 56
Дата рег-ции: Март 2010
Помог: 0 раз(а)
т.е. достаточно будет проверить размер строки, отбросить слеши и пробелы в начале и в конце и этого будет достаточно для безопасного создания директории имя которой задаёт пользователь?
(Отредактировано автором: 11 Июля, 2010 — 16:54:48)
Отправлено: 11 Июля, 2010 — 17:17:34
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009
Откуда: Россия, Санкт-Петербург
Помог: 617 раз(а)
Достаточно только убрать слэши (при том, если хостинг на *nix — то только /, а «\» путём не является). Пробелы так же никому не мешают в файловой системе, а нулевая длина — просто подсказывать пользователю, что он ошибся. Дыры в этом так же нет.
К тому же, создание директории ещё ничему не вредило.
Отправлено: 11 Июля, 2010 — 17:19:20
Покинул форум
Сообщений всего: 56
Дата рег-ции: Март 2010
Помог: 0 раз(а)
ок, спасибо. на счёт пробелов — сталкивался с проблемой когда через фтп невозможно было удалить или переименовать файлы начинающиеся с пробелов.
Отправлено: 11 Июля, 2010 — 17:51:00
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008
Откуда: Москва
Помог: 57 раз(а)
puta пишет:
отбросить слеши и пробелы
Моё личное мнение: не надо ничего отбрасывать и вообще изменять пользовательские данные. Лучше сообщить пользователю об ошибке и не обрабатывать такие имена.
Отправлено: 12 Июля, 2010 — 21:45:54
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
puta пишет:
На счёт пробелов — сталкивался с проблемой когда через фтп невозможно было удалить или переименовать файлы начинающиеся с пробелов
Видимо неправильная обработка начальных пробелов является особенностью конфигурации FTP-сервера или клиента — это же относится к файлам имя которых начинается с точки и которые трактуются как скрытые файлы и могут не показываться без добавления опции -a в команде листинга
При создании директорий устанавливайте требумого владельцева и права доступа — а также обратите внимание на права доступа к основой директории внутри которой будут создаваться вложенные — если не давать лишних широких прав доступа то пользователь не сможет навредить вам Если указанный ресурс уже существует то нужно произвести соответствующую проверку — чтобы содержимое папки не было затерто определенным образом
Также внимание следует обратить на кодировку вводимых данных — чтобы окончательная их проверка регулярными выражениями уже шла относительно той же внутренней кодировке которая будет использоваться в системных вызовах
——
Сделать можно все что угодно — нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства — http://ihost[dot]oks71[dot]ru/
Отправлено: 15 Июля, 2010 — 16:40:23
Покинул форум
Сообщений всего: 56
Дата рег-ции: Март 2010
Помог: 0 раз(а)
Ок, спасибо. Ещё один вопрос связанный с именами и файловым менеджером. Собственно проверяю теперь имя файла для двух действий: переименование файла и загрузка файла.
Нашёл вот такую функцию для удаления «лишних» символов. Вопрос в следующем, разумно ли использовать эту функцию и на выходе проверять чистый вариант с вариантом который ввёл пользователь. Если не сходятся либо выводить ошибку либо сохранять чистый вариант в зависимости от конфигурации или же стоит написать регулярку для этих вещей?
function check_filename ( $filename ) {
$result = ( substr ( $filename , 0 , 1 ) != ‘/’ && substr ( $filename , 0 , 1 ) != ‘\\’ ) ;
if ( $result ) {
for ( $i = 0 , $count = count ( $test ) ; $i < $count && $result ; $i ++ ) $result = ( strpos ( $filename , $test [ $i ] ) === false ) ;
return $result ;
забыл уточнить — проверяется только имя без расширеня. расширение я проверяю по спику допустимых их соответствующего массива
(Отредактировано автором: 15 Июля, 2010 — 16:41:22)
Отправлено: 16 Июля, 2010 — 01:16:51
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
puta пишет:
Ок, спасибо. Ещё один вопрос связанный с именами и файловым менеджером
Пожалуйста! В принципе самым эффективным и надежным способом в таком случае является распределение прав доступа на основе возможностей самой ОС — например за счет использования модулей динамического переназначения прав доступа
puta пишет:
Или же стоит написать регулярку для этих вещей?
Регулярные выражения и строковые функции не сильно отличаются между собой — и поэтому если у вас имеется хорошая проверочная функция на чистых строковых функциях то имеет смысл оставить ее без изменений
puta пишет:
Забыл уточнить — проверяется только имя без расширеня. расширение я проверяю по списку
допустимых их соответствующего массива
Вообще расширение файла можно не ограничивать никаким образом — ведь за счет использования shebang-строки имеется возможноть запуска программного кода из файла с любым расширением — и гораздо важнее ограничить права на исполнения файлов пользователя или же ограничить возможности и права доступа запускаемого процесса
——
Сделать можно все что угодно — нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства — http://ihost[dot]oks71[dot]ru/
Отправлено: 16 Июля, 2010 — 10:55:07
Покинул форум
Сообщений всего: 56
Дата рег-ции: Март 2010
Помог: 0 раз(а)
спасибо за расширенный ответ, на ваш взгляд предложенная мной функция в достаточной мере проверяет строку?
Отправлено: 16 Июля, 2010 — 15:04:55
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
puta пишет:
Спасибо за расширенный ответ, на ваш взгляд предложенная мной функция в достаточной мере проверяет строку?
Пожалуйста! В принципе вашей функции в большинстве случаев должно хватить для прорвеки разрешенного файлового пути внутри каталога пользователя — тем не менее для повышения безопасности можно сделать функцию которая проверяет не запрещенные символы а только пропускает разрешенные Такой подход удобен тем что во-первых если вы забудете указать какой-то разрешенный символ то введенный путь будет оставаться безопасным — и во-вторых это лучше согласуется с различными кодировками Дело в том что ОС работает с консольными командами и файловыми путями в определенной кодировке — и если она вдруг будет отличается от таблицы символов в которых представлены данные внутри PHP-скрипа — то он сможет и не найти в ней запрещенные символы если пользователь успешно создаст соответствующие HTTP-заголовки и строку запроса — в то же время если оставите только разрешенные символы то при любых попытках манипуляции с кодировками запроса PHP-скрипт их попросту не пропустит