Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.18;
Скачать: CL | DM;

Вниз

Правильная кодировка в .bat файле   Найти похожие ветки 

 
Destroyer ©   (2007-01-30 13:29) [0]

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


 
alex_*** ©   (2007-01-30 13:35) [1]

однако перекодировать надо


 
Плохиш ©   (2007-01-30 13:42) [2]


> Destroyer ©   (30.01.07 13:29)  

Записывай короткие имена.


 
Sergey13 ©   (2007-01-30 14:17) [3]

> [0] Destroyer ©   (30.01.07 13:29)

В кавычки длинные имена не пробовал брать?


 
JFK&MM_extramarital_son   (2007-01-30 14:22) [4]

CtrlA + CtrlX + F8 + CtrlV


 
alex_*** ©   (2007-01-30 14:25) [5]


> CtrlA + CtrlX + F8 + CtrlV

Это для фара?


 
JFK&MM_extramarital_son   (2007-01-30 14:26) [6]

нет, это для дестройера


 
novill ©   (2007-01-30 14:36) [7]

> [3] Sergey13 ©   (30.01.07 14:17)

+1


 
alex_*** ©   (2007-01-30 14:44) [8]

а что толку брать в кавычки

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

?


 
JFK&MM_extramarital_son   (2007-01-30 14:44) [9]

Видимо, фаил пишется в неправильной кодировке. (Хотя при открытии в блокноте, все смотрится нормально).

В блокноте кто-то поставил шрифт Terminal OEM/DOS


 
Destroyer ©   (2007-01-30 14:48) [10]

В кавычки конечно взял, иначе вообще не работает, они тут не причем. Все дело в кодировке

> JFK&MM_extramarital_son   (30.01.07 14:22) [4]
> CtrlA + CtrlX + F8 + CtrlV

Не понял что имеется в виду, что за F8 ?
У меня пути к файлам не статичные, а генерируются в зависимости от ситуации, надо их как-то перекодировать. В какую кодировку? Наверное UTF8, и как?


 
JFK&MM_extramarital_son   (2007-01-30 14:49) [11]

Не понял что имеется в виду, что за F8 ?

Сначала пойми в какой кодировке записан твой батник.


 
Destroyer ©   (2007-01-30 14:54) [12]

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


 
JFK&MM_extramarital_son   (2007-01-30 14:55) [13]

Тогда верь тому, что написано в консоли при выполнении твоего батника.


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

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

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

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

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


 
Destroyer ©   (2007-01-30 14:57) [15]


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

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


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

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

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


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

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

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


 
Vlad Oshin ©   (2007-01-30 15:05) [18]

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


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

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

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


 
Destroyer ©   (2007-01-30 15:10) [20]

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)) - попробую


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

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


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

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

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

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

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


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

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


 
Destroyer ©   (2007-01-30 15:31) [24]


> 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:31) [25]

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

есть файл

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

и нет файла

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


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

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

<Цитата>

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


 
Destroyer ©   (2007-01-30 15:35) [27]

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


 
Sergey13 ©   (2007-01-30 15:36) [28]

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

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


 
Destroyer ©   (2007-01-30 15:39) [29]

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


 
JFK&amp;MM_extramarital_son   (2007-01-30 15:41) [30]

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

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


 
Destroyer ©   (2007-01-30 15:44) [31]

Хех,

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


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


 
JFK&amp;MM_extramarital_son   (2007-01-30 15:46) [32]

SetLength(newoemstring,Length(oldansistring));


 
Destroyer ©   (2007-01-30 16:08) [33]

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.02.18;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.04 c
2-1169697626
Lex_!
2007-01-25 07:00
2007.02.18
BDGrid - проблемы с отображением.


15-1169917017
Ученик чародея
2007-01-27 19:56
2007.02.18
Кто такой программист?


1-1166872599
S_T_E_P_A_N___
2006-12-23 14:16
2007.02.18
Управление веб-сайтами из Delphi-программы


3-1164623047
Feds
2006-11-27 13:24
2007.02.18
Ошибка с проверкой на Null


15-1169811809
Real
2007-01-26 14:43
2007.02.18
WAP: Существует ли визуальный редактор WML?