Помощь - Поиск - Пользователи - Календарь
Полная версия: Проблема с кириллицей в .bat
Форум «Всё о Паскале» > Системы, Сети, Технологии > ОС и ПО
Unconnected
Привет всем.

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

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

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

P.S.
за детство счастливое наше - спасибо Кириллу с Мефодием! norespect.gif
Unconnected
А надо именно сохранить файл в 866 или достаточно просто поменять кодировку в батнике? Я перед своим кодом пишу chcp 866, и то же самое.
Lapp
Цитата(Unconnected @ 26.03.2010 23:07) *
А надо именно сохранить файл в 866 или достаточно просто поменять кодировку в батнике? Я перед своим кодом пишу chcp 866, и то же самое.
Конечно, сохранить. Ты говоришь ей, что используешь 866, а сам сохраняешь в 1251. Кто кого надул? smile.gif
Unconnected
А вот сохранить файл в определённой кодировке - это значит сохранить каждую строку файла в этой кодировке, или сама структура файла какая-то другая? Просто я на делфи это делать буду.
Lapp
Цитата(Unconnected @ 26.03.2010 23:30) *
А вот сохранить файл в определённой кодировке - это значит сохранить каждую строку файла в этой кодировке, или сама структура файла какая-то другая? Просто я на делфи это делать буду.
Структура ни при чем. Каждая русская буква должна быть в 866.
Lapp
Иначе говоря, буква "Б" должна быть $81, а не $C1, как в 1251

http://ru.wikipedia.org/wiki/%D0%90%D0%BB%...%B2%D0%BA%D0%B0
Unconnected
Ага. Ну мне помогла такая функция:

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


volvo и Lapp, спасибо за ответы) Я, кстати, раньше бывало тоже задумывался, зачем все эти кодировки нужны, но потом пришёл к выводу, что это точно кому-нибудь нужно..) Про братьев Солунских не понял, если честно.
Гость
Попробуйте вот так:
chcp 1251
move /Y "C:\Documents and Settings\Unconnected\Рабочий стол\Безымянный.jpg" "C:\1.jpg"
chcp 866
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.