[Quote]

    nikzzzz
  • 215
  • Longevity: 9 years
  • Posts: 3114
  • REPUTATION:127

    [+] [-]
cAu3.exe - Консольная утилита, позволяющая выполнить одну строку скрипта, написанного на Autoit с полной передачей данных в .bat файл.
cAu3.exe так-же может использоваться как консольная версия Autoit (/AutoIt3ExecuteScript) для выполнения .au3 скрипта с выводом в консоль
Syntax:
cAu3.exe [/?] Au3String [/ds:'Delims'][/da:'Delims']

cAu3.exe /AutoIt3ExecuteScript Script.au3
/ds - заменяет при выводе переводы строк на указанную строку или символ
/da - разделитель для значений массивов
/i - начальный индекс массива, по умолчанию 0
/AutoIt3ExecuteScript - выполнить скрипт с выводом в консоль
Примеры в справке.
Attachments


Last edited by nikzzzz on 2020-03-03 00:45; edited 3 times in total

[Quote]

    loban_ser
  • 17796
  • Longevity: 6 years 9 months
  • Posts: 577
  • REPUTATION:24

    [+] [-]
nikzzzz, aa
Бесспорно утилита очень хорошая, как и все ваши утилиты! az
Но вот есть нюанс, если ты ничерта не соображаешь в AutoIt т.е где брать скрипты для работы av
Это cAu3.exe /AutoIt3ExecuteScript по-моему может ваша утилита bPatch.exe
Вообщем пока не разобрался, но даже своим невооруженным глазом вижу как однострочные функции AutoIt выполняет отлично
cAu3.exe "IniRead(""%config%"",'config','idir','')"

[Quote]

    nikzzzz
  • 215
  • Longevity: 9 years
  • Posts: 3114
  • REPUTATION:127

    [+] [-]
loban_ser
73152если ты ничерта не соображаешь в AutoIt
Так особых знаний и не требуется, особой специфики, как например в PeCmd там нет, достаточно общих знаний в области программирования.
К сожалению, возможности батников ограничены, часто не хватает мелочей, не дающих возможность решить задачу, поэтому и приходится использовать подобные заплатки.
К стати, в Autoit двойные и одиночные кавычки эквивалентны, удобнее использовать одиночные, которые не используются в батниках.
cAu3.exe "IniRead('%config%','config','idir','')"

[Quote]

    loban_ser
  • 17796
  • Longevity: 6 years 9 months
  • Posts: 577
  • REPUTATION:24

    [+] [-]
nikzzzz, aa
Спасибо, буду разбираться утилита действительно очень полезная

[Quote]

    loban_ser
  • 17796
  • Longevity: 6 years 9 months
  • Posts: 577
  • REPUTATION:24

    [+] [-]
nikzzzz, aa
Утилита очень полезная, но вот есть загвоздочка, если делаю проверку через if в скобках - то неотрабатывает
Не знаю почему av
If %bootsectout% == GRUBLDR (
gsar.exe "-sI386" "-r%oDir%" bootsect.bin "..\RenameDir\bootsect.bin" >nul
) else (
for /f "delims=" %%# in ('%arch%\cAu3.exe "StringRegExpReplace(StringReplace(StringToBinary('%bootsectin%','4'),'0x',''),'(\A\d{1,2}(?=(\d{2})+\z)|\w{2}(?=\w)|\d{2}(?=\d))','\1:x')"') do set "InName=:x%%#"
for /f "delims=" %%$ in ('%arch%\cAu3.exe "StringRegExpReplace(StringReplace(StringToBinary('%bootsectout%','4'),'0x',''),'(\A\d{1,2}(?=(\d{2})+\z)|\w{2}(?=\w)|\d{2}(?=\d))','\1:x')"') do set "OutName=:x%%$"
gsar.exe "-s%InName%" "-r%OutName%" grldr_cd.bin "..\RenameDir\bootsect.bin" >nul
)
делаю так:
If %bootsectout% == GRUBLDR (
gsar.exe "-sI386" "-r%oDir%" bootsect.bin "..\RenameDir\bootsect.bin" >nul
) else (
CALL :BOOTSECT
)
:BOOTSECT
for /f "delims=" %%# in ('%arch%\cAu3.exe "StringRegExpReplace(StringReplace(StringToBinary('%bootsectin%','4'),'0x',''),'(\A\d{1,2}(?=(\d{2})+\z)|\w{2}(?=\w)|\d{2}(?=\d))','\1:x')"') do set "InName=:x%%#"
for /f "delims=" %%$ in ('%arch%\cAu3.exe "StringRegExpReplace(StringReplace(StringToBinary('%bootsectout%','4'),'0x',''),'(\A\d{1,2}(?=(\d{2})+\z)|\w{2}(?=\w)|\d{2}(?=\d))','\1:x')"') do set "OutName=:x%%$"
gsar.exe "-s%InName%" "-r%OutName%" grldr_cd.bin "..\RenameDir\bootsect.bin" >nul
goto :eof
все ок

[Quote]

    Ander_73
  • 15549
  • Longevity: 7 years 10 months
  • Posts: 3835
  • REPUTATION:127

    [+] [-]
loban_ser, внутри скобок переменные неизменны. Можно использовать EnableDelayedExpansion.
setlocal EnableDelayedExpansion
If %bootsectout% == GRUBLDR (
gsar.exe "-sI386" "-r%oDir%" bootsect.bin "..\RenameDir\bootsect.bin" >nul
) else (
for /f "delims=" %%# in ('%arch%\cAu3.exe "StringRegExpReplace(StringReplace(StringToBinary('%bootsectin%','4'),'0x',''),'(\A\d{1,2}(?=(\d{2})+\z)|\w{2}(?=\w)|\d{2}(?=\d))','\1:x')"') do set "InName=:x%%#"
for /f "delims=" %%$ in ('%arch%\cAu3.exe "StringRegExpReplace(StringReplace(StringToBinary('%bootsectout%','4'),'0x',''),'(\A\d{1,2}(?=(\d{2})+\z)|\w{2}(?=\w)|\d{2}(?=\d))','\1:x')"') do set "OutName=:x%%$"
gsar.exe "-s!InName!" "-r!OutName!" grldr_cd.bin "..\RenameDir\bootsect.bin" >nul
)
endlocal

Добавлено через 4 минуты 7 секунд:
... или совсем по чумному
If %bootsectout% == GRUBLDR (
gsar.exe "-sI386" "-r%oDir%" bootsect.bin "..\RenameDir\bootsect.bin" >nul
) else ^
for /f "delims=" %%# in ('%arch%\cAu3.exe "StringRegExpReplace(StringReplace(StringToBinary('%bootsectin%','4'),'0x',''),'(\A\d{1,2}(?=(\d{2})+\z)|\w{2}(?=\w)|\d{2}(?=\d))','\1:x')"') do ^
for /f "delims=" %%$ in ('%arch%\cAu3.exe "StringRegExpReplace(StringReplace(StringToBinary('%bootsectout%','4'),'0x',''),'(\A\d{1,2}(?=(\d{2})+\z)|\w{2}(?=\w)|\d{2}(?=\d))','\1:x')"') do ^
gsar.exe "-s:x%%#" "-r:x%%$" grldr_cd.bin "..\RenameDir\bootsect.bin" >nul

[Quote]

    loban_ser
  • 17796
  • Longevity: 6 years 9 months
  • Posts: 577
  • REPUTATION:24

    [+] [-]
Ander_73,
Спасибо! az

[Quote]

    nikzzzz
  • 215
  • Longevity: 9 years
  • Posts: 3114
  • REPUTATION:127

    [+] [-]
loban_ser
Можно и попроще
If %bootsectout% == GRUBLDR (
  %arch%\cAu3.exe "_FileWrite('..\RenameDir\bootsect.bin',StringReplace(_FileRead('bootsect.bin',512),'I386','%oDir%'),512+2)"
) else (
  %arch%\cAu3.exe "_FileWrite('..\RenameDir\bootsect.bin',StringReplace(_FileRead('grldr_cd.bin',512),'%bootsectin%','%bootsectout%'),512+2)"
)
Не проверял, не уверен на счет путей '..\RenameDir\bootsect.bin' .
Еще вариант.
If %bootsectout% == GRUBLDR (
  %arch%\cAu3.exe "StringReplace($StdIn,'I386','%oDir%')" <bootsect.bin>..\RenameDir\bootsect.bin
) else (
  %arch%\cAu3.exe "StringReplace($StdIn,'%bootsectin%','%bootsectout%')" <grldr_cd.bin>..\RenameDir\bootsect.bin
)

[Quote]

    loban_ser
  • 17796
  • Longevity: 6 years 9 months
  • Posts: 577
  • REPUTATION:24

    [+] [-]
73374не уверен на счет путей '..\RenameDir\bootsect.bin'
С путями все в порядке и приведенные вами скрипт (1) отрабатывает как нужно.
Благодарю! az
Я ведь только немного учусь. ah
73374Еще вариант
Если знал бы - не мучался с регулярками ah
ay az
PS: хотябы научился хекс значения получать.
И еще, я так понимаю теперь не нужны скрипты PeplaceBin.au3 и Peplace.au3
можно и так:
cAu3.exe "_FileWrite('путь к файлу\файл',StringReplace(_FileRead('путь к файлу\файл',512),'заменяемый текст','текст замены'),512+2)"
?
путь к файлу\файл - можно в переменных?
Проверил, работает!
есть вопрос: если текст замены будет состоять из нескольких слов и между ними пробел?

[Quote]

    nikzzzz
  • 215
  • Longevity: 9 years
  • Posts: 3114
  • REPUTATION:127

    [+] [-]
loban_ser
Насколько помню, ReplaceBin.au3 работает с UTF16, Replace.au3 с ANSI.
73381путь к файлу\файл - можно в переменных?
Некорректный вопрос, батник сам разворачивает переменные.
А так, эту опцию не включал, то-есть такой путь '%%SystemRoot%%' не поймет, если нужно получить значение переменной надо использовать EnvGet('SystemRoot') .
73381Усть вопрос: если текст замены будет состоять из нескольких слов и между ними пробел?
Текст может содержать любые символы, пример 'Привет' & @crlf & 'И до свиданья'

[Quote]

    loban_ser
  • 17796
  • Longevity: 6 years 9 months
  • Posts: 577
  • REPUTATION:24

    [+] [-]
73386работает с UTF16, Replace.au3 с ANSI
Как можно такую конструкцию:
"_FileWrite('путь к файлу\файл',StringReplace(_FileRead('путь к файлу\файл',512),'заменяемый текст','текст замены'),512+2)"
получить в нужной кодировке?

[Quote]

    nikzzzz
  • 215
  • Longevity: 9 years
  • Posts: 3114
  • REPUTATION:127

    [+] [-]
loban_ser
Если файл текстовой, то можно.
Кодировка определяется флагом, в примере 512 - Ansi, для других кодировок флаг можно узнать из описания команды Open.
А вот с бинарником такая фишка не пройдет.
С ANSI еще ничего, там один символ - один байт, UTF16 требуют два байта на символ, любое нечетное к-во байт вызовет сбой.
Либо надо переводить текст в бинарный вид, и с ним работать либо использовать другие методы.
Наиболее сложно реализовать регистронезависимое сравнение. (AAAA=aaaa)

[Quote]

    loban_ser
  • 17796
  • Longevity: 6 years 9 months
  • Posts: 577
  • REPUTATION:24

    [+] [-]
73389Либо надо переводить текст в бинарный вид, и с ним работать
Это то, что я выше приводил?

[Quote]

    nikzzzz
  • 215
  • Longevity: 9 years
  • Posts: 3114
  • REPUTATION:127

    [+] [-]
73391Это то, что я выше приводил?
Нечто похожее, пример замены в UTF16
"_FileWrite('путь к файлу\файл',StringReplace(_FileRead('путь к файлу\файл',16),StringMid(StringToBinary('заменяемый текст',2),3),StringMid(StringToBinary('текст замены',2),3)),16+2)"
Пример написан в слепую, возможны ошибки.
Замена регистрозависимая (AAA<>aaa)

[Quote]

    loban_ser
  • 17796
  • Longevity: 6 years 9 months
  • Posts: 577
  • REPUTATION:24

    [+] [-]
nikzzzz,
Спасибо, замена действитльно происходит, но на примере с Bootmgr не верно корректируется чексумма при обрезании (укарачевании)пути к шрифтам, нежели это делает скрипт ReplaceBin.au3 - там все ок
Блин.... опять я что-то не так первый раз сделал, теперь все нормально, ничего не понимаю av
Добавлено через 8 минут 16 секунд:
73393Замена регистрозависимая
В таком случае думаю нужно использовать за раннее функцию StringUpper() - что скажите?

Page 1 of 2


Display posts:    

Current time is: 04-Dec 19:07

All times are UTC + 3


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum