Другое > Hard'n'Soft
Помощь с bat'ником
(1/2) > >>
Guyver(X.B.M.):
Парни, может, кто-нибудь поможет...

Допустим, если написать

echo::>> """File 233.txt"

то в файл File 233.txt запишется два символа ":" в ANSI кодировке и ещё 2 символа - окончания строки (0D 0A в hex). В результате в hex-виде это будет 3A 3A 0D 0A

А можно ли записать таким же макаром в файл сразу hex-коды, например 00 00. Как это задать в батнике? И можно ли убрать эти 2 символа окончания?

Кто разбирается, помогите! Очень нужно...
Skay:
Guyver(X.B.M.), батник принципиально? под виндой ведь еще есть VBS, для этого решение вот http://forum.script-coding.com/viewtopic.php?pid=30067#p30067  а батники с бинарниками работать не умеют
Хотя вот нагуглил, но как то оч громоздко... http://forum.script-coding.com/viewtopic.php?id=2885
Guyver(X.B.M.):
Принципиально именно с батником...
Skay:
в общем нагуглил я тебе способ) (самому стало интересно)

--- Код: ---@echo off

<nul set /p strTemp=Ves etot text>>b.txt
<nul set /p strTemp=budet nahodit'sya>>b.txt
<nul set /p strTemp=na odnoy stroke.>>b.txt
--- Конец кода ---
вот так будет без 0D 0A
полностью чтоб писать бинарник исопльзуй предварительно http://metajiji.blogspot.ru/2013/11/hex-to-string-cmd-bat-function.html для конвертации из хекс в стринг )
вот такой костыль получится
напрямую редактировать бинарник - ссылка постом выше.

DeniSS:
Слабо представляю себе, можно попробовать разобраться в этом:
https://github.com/FrankWestlake/CMD-scripts/blob/master/hed.cmd

Ещё есть павершелл:


--- Код: ---$path = $env:UserProfile + "\Desktop\test.bin";

[Byte[]] $data =
0x48,0x45,0x4c,0x0a,
0x4c,0x4f,0x21;

[System.IO.File]::WriteAllBytes($path, $data);
--- Конец кода ---
Skay:

--- Цитата ---Ещё есть павершелл:
--- Конец цитаты ---
увы, сказали принципиально батник)

Добавлено позже:
увы, мой способ не работает. попробовал((
Guyver(X.B.M.):
Эх... Жаль, очень жаль... Так хотелось бы с помощью батника. Это так удобно - блокнотом открыл, написал за пару сек, запустил - и не надо никакой среды программирования и т.д.
Skay:
Идем сюда https://sites.google.com/site/dbenhamfiles/
качаем CharLib_bat.txt, переименовываем в CharLib.bat
читаем справку, либо через блокнот, либо в командной строке набираем charlib help
рядом с этим батником создаем свой, и уже из него вызываем нужные функции, нарпимер

--- Код: ---setlocal enableDelayedExpansion
set hex=48656C6C6F576F726C64
call charlib hex2str hex str
<nul >copy.bin set /p ".=!str!"
type copy.bin

--- Конец кода ---
48656C6C6F576F726C64 -> HelloWorld
или

--- Код: ---call charlib chr 65 myChar
call charlib asc myChar 0 myCode
echo myChar=%myChar%
echo myCode=%myCode%

--- Конец кода ---
вообще в библиотечке много интересного)
Но, с функцией hex2str есть проблемки, с ней не записать так в файл 00 (NULL) и еще некоторые - в хэлпе про это написано.
Как вариант можно через опцию заменить на какую то произвольную подстроку, а после этого уже написать отдельную функцию, и ей в файле поправить на нужный символ.

--- Код: ---setlocal enableDelayedExpansion
set hex=48656C6C6F00576F726C64
call charlib hex2str hex str
<nul >copy.bin set /p ".=!str!"
type copy.bin

--- Конец кода ---
48656C6C6F00576F726C64 -> Hello<NUL>World

--- Код: ---setlocal enableDelayedExpansion
set hex=48656C6C6F00576F726C64
call charlib hex2str /NstrTq hex str
<nul >copy.bin set /p ".=!str!"
type copy.bin

--- Конец кода ---
48656C6C6F00576F726C64 -> HellostrTqWorld
в общем я хз что ты там собрался кодить так... Но вообще, ни vbs (VisualBasicScript), ни повершелл - не требуют никако среды, это стандартные компоненты винды) при этом куда более функциональные по сравнению с батниками (которые наследие с досовых времен)
на vbs к примеру даже макросы в офисах MS пишутся..
Guyver(X.B.M.):
Спасибо! Хоть теперь без 0D0A всё получается. Всё сделал как надо. Только вот бы теперь забить файл символами 00 - вот это пока не получается... Причём без второго батника, а из тела первого, дописав функцию прямо в его начало. Так же можно? Чтобы с двумя батниками не возиться... Простую функцию только для 00, без всех других hex преобразований. Файл именно 00 хотелось бы забить... Пока не выходит, но я не сдаюсь...
GalaxyBot_00:
это не то? http://herli.ru/1264-kak-sgenerirovat-mnogo-pustyx-fajlov.html
Skay:
Guyver(X.B.M.), мое самое первое сообщение в теме, вторая ссыль на батник для редактирования бинарника., смотришь смещение в своей hex строке, переходишь на него,  заменяешь га 00 следующие лишение - удаляешь.
в один файл легко, читай справку про call.
Guyver(X.B.M.):
спасибо, проглядел первое сообщение твоё невнимательно! ;о)
Leprikon:
Дабы не засорять форум спрошу здесь. Вобщем мне нужно сделать батник чтобы переименовать папку, запустить ехе а после завершения ехе переименовать папку обратно. Это нужно чтоб поставить 2 несовместимых мода на одну игру.
я сделал так
rename gamedata1 gamedata
Stalker-COP.exe
rename gamedata gamedata1
но почемуто папки не переимновываются.

Добавлено позже:
все я понял в чем дело просто Stalker-COP.exe просто запускает игру а процесс в xrEngine.exe как сделать чтобы батник проверял наличие этого процесса а не шел дальше?
DeniSS:

--- Код: ---START /WAIT /B Stalker-COP.exe
--- Конец кода ---
Например.
Leprikon:

--- Цитата: DeniSS от 06 Март 2014, 20:29:05 ---
--- Код: ---START /WAIT /B Stalker-COP.exe
--- Конец кода ---
Например.

--- Конец цитаты ---
неа некатит я ж говорю Stalker-COP.exe только запускает игру и отключается а игра это xrEngine.exe поэтому папки сразу переименовываются обратно
если сделать так
rename gamedata1 gamedata
Stalker-COP.exe
xrEngine.exe
rename gamedata gamedata1
то мод работает, но xrEngine.exe запускается 2 раза и его приходится отключать вручную через диспетчер задач! а если напрямую через xrEngine.exe то выыходит ошибка. :neznayu:
DeniSS:
Тогда

--- Код: ---REN gamedata1 gamedata
Stalker-COP.exe
PAUSE
REN gamedata gamedata1

--- Конец кода ---
Наигрался, вышел, нажал любую клавишу и готово  :)
Leprikon:

--- Цитата: DeniSS от 06 Март 2014, 20:50:34 ---Тогда

--- Код: ---REN gamedata1 gamedata
Stalker-COP.exe
PAUSE
REN gamedata gamedata1

--- Конец кода ---
Наигрался, вышел, нажал любую клавишу и готово  :)

--- Конец цитаты ---
ВО то что надо! :jumpy: :thumbup: :gamer:
Yoti:

--- Цитата: Skay от 29 Январь 2014, 21:36:32 ---в общем нагуглил я тебе способ) (самому стало интересно)

--- Конец цитаты ---
Шикарно =)
Photon9:
Возник небольшой вопросец. Можно ли создать батник который будет запускать желаемую программу в режиме совместимости с требуемой осью и от имени админа? Примером мне надо сделать такой для инсталера игры, чтоб совместимость была с Windows 7 и запуск от админа. Понятно что проще выставить эти параметры в свойствах экзешника, но как показал опыт для некоторых людей сия процедура равна запуску космического корабля :)
cptPauer:
Вроде бы в Microsoft Compatibility Toolkit можно выставить подобное (и админа, и совместимость). Там куча всего, будет странно, если нету таких базовых вещей. Потои сделать патч совместимости и добавить его батником/инсталлятором в систему, при первой установке игры.

--- Код: ---sdbinst.exe -q yourpatch.sdb
--- Конец кода ---

Иначе надо будет извращаться типо как тут http://stackoverflow.com/questions/19613846/how-to-add-administrator-rights-in-a-bat-file

Правда, у тебя не получится поменять права файла или добавить патч совместимости, если установщик сам без прав админа.
Но можно проверить есть ли права админа через батник и выдать предупреждение.
 
--- Код: ---@echo off
 echo проверка прав админа
 echo.
 pause
 echo.

    net session >nul 2>&1
    if %errorLevel% == 0 (
        echo ОТЛИЧНО: есть права админа&goto allright
    ) else (
        echo ПЕЧАЛЬНО: нету прав админа.&goto next
    )

    pause >nul

:next
echo без прав админа скрипт закроется
ping -n 1 -w 5000 192.168.254.254 >nul
exit

:allright
echo.
echo дальше мог быть скрипт..
echo.
pause

--- Конец кода ---
Навигация
Главная страница сообщений
Следующая страница

Перейти к полной версии