Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Правильная кодировка в .bat файле [D7, XP]


Страницы:   1 2

Destroyer ©   (2007-01-30 13:29:00) 

Программа генерирует .bat фаил, в него пишутся пути к файлам. При выполнении сгенерированного файла, никакие команды, записанные в нем не выполняются, если в имени файла или пути к нему присутствует кириллица.
Пи его выполнении получаю :
Не удается найти C:\test2\─юъєьхэЄ Microsoft Office Word.docx
Где ─юъєьхэЄ - Документ.
Видимо, фаил пишется в неправильной кодировке. (Хотя при открытии в блокноте, все смотрится нормально). Как записать .bat фаил в нужной кодировке?


Destroyer   (2007-01-30 16:08:00) [1]

при преобразовании OemToChar(PChar(tempf),PChar(tempstr)) ;
получаем в батнике:
del "C:\test2\-юъєьхэЄ Microsoft Office Word.docx"
в консоли:
Не удается найти C:\test2\-■·║№ї¤к Microsoft Office Word.docx

при преобразовании CharToOem(PChar(tempf),PChar(tempstr)) ;
получаем в батнике:
del "C:\test2\„®Єг¬Ґ­в Microsoft Office Word.docx"
мы как бы выполнили предперекодирование
и все выполняется. Наконец-то. Спасибо.


JFK&MM_extramarital_son   (2007-01-30 15:46:00) [2]

SetLength(newoemstring,Length(oldansistring));


Destroyer   (2007-01-30 15:44:00) [3]

Хех,

> Выделять память подо что? Переменные определены, если можно
> пример.


хотелось бы пример выделения памяти для правильной работы CharToOem и OemToChar


JFK&MM_extramarital_son   (2007-01-30 15:41:00) [4]

Sergey13, пишу чисто в консоси del "C:\test2\Документ Microsoft Office Word.docx" - работает.

В русской винде русский язык консоли отличается от "других русских языков" в русской винде.
Потому и работает при вводе в консоль.
И не работает из батника.


Destroyer   (2007-01-30 15:39:00) [5]

Sergey13, пишу чисто в консоси del "C:\test2\Документ Microsoft Office Word.docx" - работает. Батник читается в консоль при вывполнении в неправильной кодировке. Отсюда и проблема, надо перекодировать, вот как... похоже CharToOem, но пока не понял как правильно ее использовать.


Sergey13   (2007-01-30 15:36:00) [6]

> [20] Destroyer ©   (30.01.07 15:10)

Создай (как угодно) файл "C:\test2\Document Microsoft Office Word.docx", переделай (руками) соответственно батник. Попробуй выполнить. Хоть понятно будет кирилица или нет влияет.


Destroyer   (2007-01-30 15:35:00) [7]

Выделять память подо что? Переменные определены, если можно пример.


JFK&MM_extramarital_son   (2007-01-30 15:32:00) [8]

Выдает ошибку Access violation  в users32.dll

<Цитата>

Пушкин убит на дуэли.
Память выделять теперь надо самому.


JFK&MM_extramarital_son   (2007-01-30 15:31:00) [9]

Что еще раз подтверждает тезис о том, что надо тупо верить тому, что система пишет в консоли в ответ на ваши батники.

есть файл

C:\test2\Документ Microsoft Office Word.docx

и нет файла

C:\test2\─юъєьхэЄ Microsoft Office Word.docx


Destroyer   (2007-01-30 15:31:00) [10]


> JFK&MM_extramarital_son   (30.01.07 15:26) [22]
> У него просто реально нет файла
> C:\test2\Документ Microsoft Office Word.docx
>
> если поверить в то, что батник в анси, (а вывод консоли
> это косвенно подтверждает), то других вариантов просто нет.
>
>
> Не удается найти C:\test2\─юъєьхэЄ Microsoft Office Word.
> docx
>
> Если файла нет, то его и не удается найти.

А я про что говорю? Я про это с первого поста говорю. ─юъєьхэЄ - вот как сделать так, чтоюы это нормально читалось из батника? А не в таком виде.
Использовать короткие имена... а если у меня 2 файла :
Документ Microsoft Office Word.docx и
Документ Microsoft Office Word1.docx
какой удалится? Так что это не выход. Нужно всего лишь сделать так, чтобы батник читался нормально. Как это сделать?
P.S. попробовал
tempf:=LockedFiles[j];
OemToChar(PChar(tempf),PChar(tempstr)) ;


Выдает ошибку Access violation  в users32.dll


JFK&MM_extramarital_son   (2007-01-30 15:29:00) [11]

Хотя все наоборот должно быть.
Батник должен быть в оем


JFK&MM_extramarital_son   (2007-01-30 15:26:00) [12]

У него просто реально нет файла
C:\test2\Документ Microsoft Office Word.docx

если поверить в то, что батник в анси, (а вывод консоли это косвенно подтверждает), то других вариантов просто нет.

Не удается найти C:\test2\─юъєьхэЄ Microsoft Office Word.docx

Если файла нет, то его и не удается найти.


Плохиш   (2007-01-30 15:23:00) [13]

Хм, для тех кто не ищет геморрой фирма мелкий&мягкий сделала функцию GetShortPathName.


Destroyer   (2007-01-30 15:10:00) [14]

Sergey13, мне выводить в консоль ничего не нужно, просто при выполнении батника его содержимое где присутствует кириллица не выполняется. Кодировка консоли, тут не причем, нужно чтобы батник выполнял записанные в него функции.
Код, пишущий батник:
var ClCache     : textfile;
...

batFilePath:=D+'\ClCache.bat';
assignfile(ClCache,batFilePath);
rewrite(ClCache);
writeln(ClCache,'@echo off');
writeln(ClCache,'echo Some info about this file');
...
writeln(ClCache,'del '+ '"'+ LockedFiles[j] +'"');
writeln(ClCache,'del "'+ D +'\ClCache.bat"');
writeln(ClCache,'exit');



Сам батник:

@echo off
echo Some info about this file
del "C:\test2\Документ Microsoft Office Word.docx"
del "C:\ClCache.bat"
exit


Результат:
При выполнении батника не удаляется фаил C:\test2\Документ Microsoft Office Word.docx

В консоли пишет:

Some info about this file
Не удается найти C:\test2\─юъєьхэЄ Microsoft Office Word.docx


Вопрос:

Как правильно записать батник так, чтобы норально выполнялись в нем команды, для этого, очевидно, нужна правильная кодировка, как ее выставить при записи батника?
Теперь все, надеюсь предельно ясно.

OemToChar(PChar(OldStr),PChar(NewStr)) - попробую


JFK&MM_extramarital_son   (2007-01-30 15:06:00) [15]

У тебя ошибка в подстроке "документ".

PS Верь тому, что написано в консоли.


Vlad Oshin   (2007-01-30 15:05:00) [16]

OemToChar(PChar(OldStr),PChar(NewStr))


JFK&MM_extramarital_son   (2007-01-30 14:58:00) [17]

Вопрос был такой: Как перекодировать в правильную кодировку при записи в батник и в какую?

Ни в какую, раз он у тебя уже в анси


JFK&MM_extramarital_son   (2007-01-30 14:57:00) [18]

Мой батник записан в ANSI

Кстати неплохо бы увидеть здесь его реальное содержимое.


Destroyer   (2007-01-30 14:57:00) [19]


> JFK&MM_extramarital_son   (30.01.07 14:55) [13]
> Тогда верь тому, что написано в консоли при выполнении твоего
> батника.

Вопрос был такой: Как перекодировать в правильную кодировку при записи в батник и в какую?


Sergey13   (2007-01-30 14:56:00) [20]

> [10] Destroyer ©   (30.01.07 14:48)
> В кавычки конечно взял, иначе вообще не работает,

Так с кавычками работает?

> [8] alex_*** ©   (30.01.07 14:44)
> а что толку брать в кавычки
>
> > C:\test2\-юъєьхэЄ Microsoft Office Word.docx
>
> ?

То, что это наверное вывод консолипри выполнении батника. А ее еще возможно надо настроить на вывод вин-кодировки.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо