![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Правильная кодировка в .bat файле [D7, XP]
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
>
> ?
То, что это наверное вывод консолипри выполнении батника. А ее еще возможно надо настроить на вывод вин-кодировки.