Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Вниз

Правильная кодировка в .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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.042 c
2-1170421656
DelphiLexx
2007-02-02 16:07
2007.02.18
Очистить RxSpeedButton.Glyph программно


15-1169623503
так себе
2007-01-24 10:25
2007.02.18
программирование микроконтроллеров


2-1170357940
ZiTRaX
2007-02-01 22:25
2007.02.18
Ошибка при работе с директивой absolute


9-1144144001
антонио
2006-04-04 13:46
2007.02.18
[GLScene] Создание объекта


3-1164250027
~SerJant~
2006-11-23 05:47
2007.02.18
Использование FastReport (TfrxBDEDataBase)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский