Author Topic: Баг при создании .bat и последующем вызове его. Где-то начиная с v.4.013b  (Read 4519 times)

0 Members and 1 Guest are viewing this topic.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
демонстрационный код:
Code: (clickermann) [Select]
STRWRITELN ("test.bat", "pause", 1) //не выполняется
EXECUTE ("test.bat")
wait(2)

STRWRITELN ("test.bat", "pause") //выполняется, скрин ниже
EXECUTE ("test.bat")
halt


в батнике:
Code: [Select]
pause
pause

получается, что к первой строке дописывается какаято ересь, и она игнорируется. в 4.13.010b вроеде еще работало правильно.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
получается, что к первой строке дописывается какаято ересь, и она игнорируется. в 4.13.010b вроеде еще работало правильно.
Эта ересь называется BOM - маркер последовательности байтов.
Вот мы здесь затрагивали переход на UTF-8 и BOM в частности.
http://crapware.aidf.org/forum/index.php?topic=356.msg26754#msg26754

К несчастью bat кажется не понимает BOM и соответственно метку не игнорирует.
Можно попробовать создать файл заранее в нужной кодировке, не знаю при записи поменяет или нет.
Есть ещё мысль первой строкой заносить не команду, а комментарий... хотя нет, не запустится.

Ну и простые команды/серии команд можно запускать напрямую не записывая в батник. Всегда так делаю если возможно.
Нельзя напрямую только сложные батники с циклами и сменой кодировок для ввода-вывода. Ну может ещё для работы с параметрами, тут хз.


Атеист

  • Guest
Похожая проблема, хотя вроде не смертельная.
Code: (clickermann) [Select]
TFCLEAR("config.ini", 0) // после очистки меняет кодировку файла ANSI на UTF-8
INIWRITE("config.ini", "Параметр", "Значение", "Секция") // делает запись, или создает новый файл в кодировке ANSI
// Если файл "config.ini" очистить, не удаляя его с диска, то сделать запись кирилицей через INIWRITE() уже не получится

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
P.S. при записи меняет кодировку, поэтому предварительное создание не катит.

P.P.S. нашёл костыль. Будем писать в файл не кликером, а самими cmd командами.
Code: (clickermann) [Select]
// добавляем строку в файл (ели создаём с 1 строкой, просто >)
EXECUTE("cmd.exe", "/C Echo pause >> test.bat")
// теперь вызываем
EXECUTE ("test.bat")
Да здравствуют новые костыли, старые уже надоели.

Всё это конечно, чаще не нужно и можно просто вызывать команды напрямую (надеюсь pause это пример?).


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile

Всё это конечно, чаще не нужно и можно просто вызывать команды напрямую (надеюсь pause это пример?).
конечно пример. сення никак не мог понять че не работает... вышел из положения вот таким кастылем:
Code: (clickermann) [Select]
STRWRITELN ("test.bat", "1", 1)   //пишем лишьбы что в файл .bat
STRWRITELN ("test.bat", "clip < text.txt")  //помещаем содержимое файла в буфер обмена
EXECUTE ("test.bat")

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
таки обратной совместимости прямо вообще со всем не вышло...
в принципе тут решений несколько. либо до кучи прилепить еще и команду перекодирования текстовых файлов (имхо худший варик). либо приделать какой нить костыль внутренний, который ИСКЛЮЧИТЕЛЬНО батники будет сохранять в ANSI (имхо глупейший варик). либо реализовать в смамом кликере, то, что вам надо от батников этих. а это я полагаю в 99% примитивные файловые операции. в принципе ввиду отсутствия идей была мысль прикрутить этот пак команд, шоб прям воще все можно было делать из км.

ну а так да. в первую строчку любую фигню пишите и он просто проскочет и пойдет дальше

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
А вот и второй наступивший
http://crapware.aidf.org/forum/index.php?topic=4059.0

Только не на bat, а уже на ini.
Говорил я, что с этим BOM намучаемся, какой бы стандарт он не был.

Теперь при команде читающей ini нужно прикрутить отпиливание BOM если он есть. Записывающей - не знаю.


Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
а вот это не ко мне. ну ко мне конечно, но не ко мне. это к разрабам RAD Studio из 2012 года
я уже говорил что в ini поддержки юникода пока нет. ни с бом ни без него. ini файлы тока в ansi. кликер их выплевывает в ansi так же.

уверен в более новых студиях проблема давно решена

regint

  • Зашел в гости
  • *
  • Posts: 1
    • View Profile
таки обратной совместимости прямо вообще со всем не вышло...
в принципе тут решений несколько. либо до кучи прилепить еще и команду перекодирования текстовых файлов (имхо худший варик). либо приделать какой нить костыль внутренний, который ИСКЛЮЧИТЕЛЬНО батники будет сохранять в ANSI (имхо глупейший варик). либо реализовать в смамом кликере, то, что вам надо от батников этих. а это я полагаю в 99% примитивные файловые операции. в принципе ввиду отсутствия идей была мысль прикрутить этот пак команд, шоб прям воще все можно было делать из км.

ну а так да. в первую строчку любую фигню пишите и он просто проскочет и пойдет дальше

да, если часть команд CMD будет реализована в самом кликере будет очень удобно.
Вот вариант, когда это не поможет таки:
Code: [Select]
%adb% shell input text I111II11
Ввода текста по ADB в программе в Bluestacks

Команда препроцессора, которая сообщает в какой кодировке будет сохраняться файл? Просто функция переключающая кодировку, в которой будет сохраняться файл?
Кстати в windows 7 как минимум нормально выполняются BATники с UTF-8 без BOM -> команда препроцессора которая меняет кодировку на "UTF-8 без BOM"

Немножко сумбурно, сорян! ::)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Они и в XP нормально выполняются, если без BOM.
Другое дело, если нужно в консоль писать на русском, тогда только 866 иначе кракозябры в выводе.