Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ ОС и ПО _ Проблема с кириллицей в .bat

Автор: Unconnected 27.03.2010 1:52

Привет всем.

С недавних пор столкнулся с такой проблемой, что мой bat-файл в одной директории работает, а в другой не работает. Содержание например такое:

Цитата

move /Y "C:\Documents and Settings\Unconnected\Рабочий стол\Безымянный.jpg" "C:\1.jpg"


Так картинка не перемещается. Опытным путём удалось установить, что вся проблема в кириллических словах в пути к файлу (в данном случае Рабочий стол). Вместо move может быть что-то другое. При запуске bat-ника из cmd последняя так и говорит - файл не найден. Хотя, если сделать например:

Цитата

move /Y "C:\Documents and Settings\Unconnected\Безымянный.jpg" "C:\1.jpg"


, то всё работает. Я думал, проблема в кодировке, менял на chcp 1251 и ещё на какую-то - безрезультатно.

Автор: volvo 27.03.2010 2:36

Цитата
Я думал, проблема в кодировке, менял на chcp 1251 и ещё на какую-то - безрезультатно.
BAT-файл должен быть сохранен в OEM кодировке, то есть кодовая страница 866 для русской Windows.

Вообще, http://p10903.clients.m-10.ru/viewtopic.php?id=4055 тему почитай ...

Автор: Lapp 27.03.2010 3:06

Интересно, настанет ли когда-либо тот счастливый день, когда проблемы кодировок канут в прошлое и не возвратятся? rolleyes.gif

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

P.S.
за детство счастливое наше - спасибо Кириллу с Мефодием! norespect.gif

Автор: Unconnected 27.03.2010 3:07

А надо именно сохранить файл в 866 или достаточно просто поменять кодировку в батнике? Я перед своим кодом пишу chcp 866, и то же самое.

Автор: Lapp 27.03.2010 3:13

Цитата(Unconnected @ 26.03.2010 23:07) *
А надо именно сохранить файл в 866 или достаточно просто поменять кодировку в батнике? Я перед своим кодом пишу chcp 866, и то же самое.
Конечно, сохранить. Ты говоришь ей, что используешь 866, а сам сохраняешь в 1251. Кто кого надул? smile.gif

Автор: Unconnected 27.03.2010 3:30

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

Автор: Lapp 27.03.2010 3:34

Цитата(Unconnected @ 26.03.2010 23:30) *
А вот сохранить файл в определённой кодировке - это значит сохранить каждую строку файла в этой кодировке, или сама структура файла какая-то другая? Просто я на делфи это делать буду.
Структура ни при чем. Каждая русская буква должна быть в 866.

Автор: Lapp 27.03.2010 4:25

Иначе говоря, буква "Б" должна быть $81, а не $C1, как в 1251

http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D1%8C%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%B0%D1%8F_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0

Автор: Unconnected 27.03.2010 4:38

Ага. Ну мне помогла такая функция:


function MyWriteln(const S: string):string;
var
NewStr: string;
begin
SetLength(NewStr, Length(S));
CharToOem(PChar(S), PChar(NewStr));
result:=newstr;
end;


volvo и Lapp, спасибо за ответы) Я, кстати, раньше бывало тоже задумывался, зачем все эти кодировки нужны, но потом пришёл к выводу, что это точно кому-нибудь нужно..) Про братьев Солунских не понял, если честно.

Автор: Гость 26.11.2010 16:18

Попробуйте вот так:
chcp 1251
move /Y "C:\Documents and Settings\Unconnected\Рабочий стол\Безымянный.jpg" "C:\1.jpg"
chcp 866