Пример пятый. Переименование файлов.
Представьте себе такую задачу. У вас есть куча файлов названных с
использованием кириллических символов. Пока они лежат у вас на диске все
в порядке, но вот если вам захочется их поместить в интернет или записать
на CD-диск - тут придется их всех переименовывать и пользоваться только
латиницей. Если файлов немного или они однотипны, то проблем не возникает,
а если это, например, семейный фотоальбом и все фото названы по-русски?
Ниже приведена программа, которая на входе получает список (list.txt)
файлов названных с кириллицей, а на выходе генерит пакетный файл (list.bat),
запуск которого из нужного каталога переименовывает все файлы уже с
использованием только латиницы (см. Примечание 2). Входной файл list.txt может быть получен так:
В нужной директории наберите команду "dir >list.txt", а затем
отредактируйте полученный файл (см. Примечание 1), оставив в нем только длинные имена файлов
(т.е. убрав все дополнительные сведения вроде размера и даты создания файла,
выдаваемые командой dir). Понятно, что досовское приложение, откуда вы
запустите эту команду, должно поддерживать длинные имена. Я использовал FAR
manager.
Примечание 1. Команда "dir /b >list.txt" - выдает только имена файлов, без
дополнительной информации - как раз то что нам и надо.
Примечание 2. Программа принимает один необязательный параметр: [-s|-S|/s|/S],
который позволяет преобразовывать пробелы в именах файлов в знаки подчеркивания.
var s_r,s_e,s_r2,s_e2,s_r3,s_e3,s,d:string;
f,g:text;
k:byte absolute s;
i:byte;
begin
{ Одному символу кириллицы соответствует один символ латиницы }
s_r:='АБВГДЕЗИЙКЛМНОПРСТУФХЦЪЫЬЭабвгдезийклмнопрстуфхцъыьэ';
s_e:='ABVGDEZIJKLMNOPRSTUFHC_Y_Eabvgdeziiklmnoprstufhc_y_e';
{ Одному символу кириллицы соответствует два символа латиницы }
s_r2:='ЁЖЧШЮЯёжчшюя';
s_e2:='YOZHCHSHYUYAyozhchshyuya';
{ Одному символу кириллицы соответствует 4 символа латиницы }
s_r3:='Щщ';
s_e3:='SHCHshch';
if (ParamCount>0) then
begin
s:=ParamStr(1);
if (UpCase(s[2])='S') then { Заменяем пробелы на "_" }
begin
s_r:=s_r+' ';
s_e:=s_e+'_';
end;
end;
assign(f,'list.txt');
reset(f);
assign(g,'list.bat');
rewrite(g);
while not eof(f) do
begin
readln(f,s); d:='';
for i:=1 to k do
if Pos(s[i],s_r)>0 then
d:=d+s_e[Pos(s[i],s_r)]
else if Pos(s[i],s_r2)>0 then
d:=d+copy(s_e2,1+2*(Pos(s[i],s_r2)-1),2)
else if Pos(s[i],s_r3)>0 then
d:=d+copy(s_e3,1+4*(Pos(s[i],s_r3)-1),4)
else d:=d+s[i];
writeln(g,'ren "',s,'" "',d,'"');
end;
close(f);
close(g);
end.
Текст программы вместе с примером файла list.txt можно взять
здесь.
 
 
 
 
 
 
|