Форум «Всё о Паскале» _ ОС и ПО _ Проблема с кириллицей в .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
Интересно, настанет ли когда-либо тот счастливый день, когда проблемы кодировок канут в прошлое и не возвратятся?
Поставлю вопрос более точно: возможно ли вообще теоретически создание системы, в которой ошибки с кодировками будут исключены? Я имею в виду не то, что нельзя будет намеренно установить неправильную кодировку, а то, что нечаянные действия не смогут привести к ошибке.
P.S. за детство счастливое наше - спасибо Кириллу с Мефодием!
Автор: 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. Кто кого надул?
Автор: 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
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