![]() |
автоматический поиск и замена HEX в файлах
Возможно ли такое сделать с помощью cmd? Нужно автоматически поправить HEX большого количества файлов с последующим переименованием.
И вот ещё: как сделать так чтобы такой скрипт работал: 1 - при перетаскивании на него одного/группы файлов 2 - при запуске производился поиск и обработка файлов вглубь по каталогам. p.s.: иногда нужно не заменить hex, а добавить его в определённое место в файле. |
Цитата:
P.S. если размер файлов <= 65280 байт можно поизвращаться со штатной DEBUG.EXE |
Вложений: 1
Вот пример, заголовок файла, нужно найти значения на верхней картинке и заменить их на значения на нижней картинке, очень часто требуются именно такие операции. Ещё иногда нужно добавить заголовок в файл. Хотелось бы обойтись без сторонних утилит, так сказать автоматизировать, потому что иногда количество файлов переваливает за несколько тысяч.
|
Цитата:
Цитата:
|
Уточню, что я знаком как с cmd так и с hex довольно поверхностно, поэтому вот этого
Цитата:
Цитата:
Цитата:
Так вот к вопросу Цитата:
|
Цитата:
взять с файла TEST1.BIN первые 128 байт и скопировать в начало (с заменой) файла TEST2.BIN, вариант на DD: Код:
dd bs=1c count=128 if="test1.bin" of="%~n0.tmp" Код:
dd bs=1c count=128 if="test1.bin" of="test2.bin" |
это с помощью стандартного CMD?
а как заменить не начало (либо конец), а именно определённые значения? потому что бывает так, что есть файлы с разными значениями вначале, соответственно эти значения нужно заменить на другие, тоже разные. и как сделать это с маской? или вот это: Цитата:
|
Цитата:
Цитата:
Цитата:
|
Да-да, теперь с программой понятно (я так понимаю она тоже консольная) чтобы например зашить её утилитой Quick Batch File Compiler.
именно блок (определённые значения) нужно заменить, прошу покажите на примере хотя бы моих файлов |
Цитата:
Цитата:
Код:
@echo off |
Так, значит получается скрипт ищет блок в файле DXT5_2048x2048.dds и подставляет в то же место в файл mcc001n2b. SDD. Это работает!
Но при этом получается? что нужен файл DXT5_2048x2048.dds, который вечит 4 мб, хотя думаю можно удалить всё, что не нужно в HEX'e этого файла (думаю при этом будет весить не больше трёх килобайт). А как осуществить поиск определённого блока и замену этого блока на новый по маске, допустим *. SDD? |
Цитата:
Цитата:
Цитата:
|
Так, постараюсь объяснить исходя из того, что я от вас уже узнал.
Дано: 1000 файлов с расширением *. SDD 700 файлов с заданной позиции (=0) имеют блок заданного размера (128 байт) 1-ого типа (DXT5) 200 файлов с заданной позиции (=0) имеют блок заданного размера (128 байт) 2-ого типа (DXT1) 100 файлов с заданной позиции (=0) имеют блок заданного размера (128 байт) 3-ого типа (DXT1a) типы равны по размеру блока, но отличаются содержанием этого блока Задача: 1 - в каждом файле с расширением *. SDD заменить блок заданного размера (128 байт) на новый тип 2 - переименовать расширение *. SDD в *.dds |
Tosyk, 700+200+100=1000, т.е. каждому SDD-файлу соответствует какой-то один блок из 3-х, допустим эти блоки находятся в файлах DXT5.BIN, DXT1.BIN, DXT1a.BIN, которые находятся в том же каталоге, где батник... осталось решить какой из этих трёх блоков выбрать для конкретного SDD-файла?... или это не имеет значения, т.е. по порядку - первые 700 -> DXT5.BIN, следующие 200 -> DXT1.BIN и т.д.?.. и какова примерно структура каталога с SDD-файлами?
|
Цитата:
Цитата:
Цитата:
DXT1 256x256 DXT1 512x512 DXT1 1024x512 DXT1 1024x1024 DXT1 2048x2048 DXT1 2048x1024 DXT5 256x256 DXT5 512x512 DXT5 1024x512 DXT5 1024x1024 DXT5 2048x2048 DXT5 2048x1024 ... цифры (пр.: 256x256) - это размер текстуры в пикселях. Типов текстур может быть и больше. Каждому типу соответствует свой блок заданного размера (128 байт) и начинается он с заданной позиции (=0). |
Цитата:
|
Цитата:
Вот я и говорил об этом в моём посте чуть выше Цитата:
Код:
SDD...|...@...5TXD...@... Код:
DDS |...@...DXT5... SDD, затем ..@.., затем 5TXD, затем ...@... и если сочетание всех этих значение найдено, то приравниваем этот файл к типу DXT5 2048x1024 (в данном случае) и заменяем его первые 128 байт на новые. |
Цитата:
- считываем заголовок во временный файл; - ищем точно такой же файл в библиотеке "неверных шаблонов"; - если файл найден, берем новый шаблон с таким же именем; - восстанавливаем новый заголовок только надо определиться с положением/размером блока, однозначно идентифицирующего тип "неверного" шаблона и "построить" библиотеку пар шаблонов старый/новый Цитата:
|
Цитата:
|
Цитата:
Цитата:
Код:
dd bs=1c count=128 if="mcc001n2b.sdd" of="DXT5_2048x2048.old" тогда батник по обработке может быть таким: Код:
@echo off |
Отлично, всё работает! А как заставить его:
1 - находить *. sdd файлы вглубь по каталогам и преобразовывать 2 - конвертировать файл при перетаскивании его на *.bat файл, конвертировать только этот файл, даже если в этом каталоге присутствуют другие для первого это может быть вот так?: Код:
@echo off |
1. да вроде он итак должен искать в подкаталогах - см. "HELP FOR" для ключа /R:
Цитата:
|
Понятно, а как по второму пункту:
Цитата:
ДОБАВКА: возможно ли сделать конвертирование из мастер файла, т.е. не создавать для каждого типа свой файл *.new и *.old? ДОБАВКА2: Мне кажется нужно воспользоваться вашим предложением Цитата:
Если сделать подстановку по диапазону размеров, то как будет скрипт выглядеть? ДОБАВКА3: А вы знаете каконибудь компилятор bat/cmd что при его выполнении не мелькало окошко cmd (что происходит в большинстве таких программ), а чтобы появлялось окошко с заполняющейся полоской, как при инсталяции? |
Цитата:
Цитата:
Цитата:
Код:
set DXT5_2048x2048_OLD=205344440000007C000A1007000008000000080000400000000000000000000C Цитата:
|
Цитата:
|
Tosyk, мы уже обсудили три возможных подхода:
- на базе DD, библиотека шаблонов состоит из пар OLD/NEW файлов-заголовков; - на базе DD, библиотека шаблонов состоит из пар: NEW-заголовок-файл + размер OLD-файла; - на базе SFK, библиотека шаблонов состоит из пар HEX-переменных, описывающих NEW/OLD заголовки - определитесь с выбором, - сформируйте соответствующую библиотеку шаблонов (3-5 типов), - создайте тестовую структуру каталогов (хотя бы по 1 файлу каждого типа), - запакуйте и выложите в студию только в этом случае имеет смысл двигаться дальше и ваять готовый код Цитата:
|
Прошу прощения за задержку.
Выкладываю архив с библитекой шаблонов и тестовой структурой файлов. скачать тут Как я уже упомянал выше: можно ли использовать информацию о размере файлов для определения типа? вот что я исследовал: Код:
4 kb - DXT1 64x64 Если ту же операцию можно повторить с помощью SFK, но только кодом, то это предпочтительнее. Посмотрел программы HTA/AutoIT/AHK, и что то не совсем понимаю, как с помощью них сделать простой прогресс-бар ( |
Приветствую, прошу прощения за дабл-пост.
Уважаемый товарищ amel27, не хотелось бы останавливаться на пол пути. |
Подскажите способ, как заменить в autorun.dll все совпадения "sources\setup.exe" на "sources\set86.exe" и(или) "Sources\setep.exe" на "Sources\set86.exe", с сохранением в новый файл.
|
sov44, про bsdiff\bspacth что-нибудь знаете? bspacth, к слову, в инсталляторе JRE используется даже.
|
Цитата:
upd. решено Код:
@echo off |
Задача следующая: у всех файлов в папке удалить первый байт!
Мне уже предложили скрипт на PowerShell. И он даже неплохо работает, пока размер обрабатываемого файла не превышает некую критическую величину около 100 Мб. Там происходит переполнение массива и вылет в ошибку. Поэтому хотелось бы какую-то альтернативу. DD пробовал - тоже проблема с большими файлами. Вот команда: Код:
dd bs=1c skip=1 if="file1" of="file2" --progress Есть какие-то более подходящие решения под мой запрос? |
m0nkrus, вышеуказанный Swiss File Knife download | SourceForge.net не рассматривали?
|
Цитата:
Что-то типа: Код:
$file = 'test.tst' |
Iska, не очень представляю, какой синтаксис мне в этой этой программе мог бы помочь...
YuS_2, я честно скажу: я сам лично в PowerShell ни в зуб ногой. Вот скрипт, вашего же, кстати, производства, что я сейчас использую: http://forum.oszone.net/post-2956811.html#post2956811 Если сможете порекомендовать, как его усовершенствовать, чтобы он работал и с большими файлами, я буду только рад! Только давайте тогда в той теме и продолжим. Здесь все-таки шел запрос на CMD /BAT. P.S. Задача не разовая, увы. Поэтому и задалбывает каждый раз выдергивать из массива большие файлы, чтобы в них вручную через HxD срезать этот чертов байт, после чего возвращать их назад, пытаясь не ошибиться в дереве папок. |
Цитата:
|
неужели никто не смотрел
https://stackoverflow.com/questions/...g-dds-textures 2 ссылки оттуда: бат файлы и кмд не потянут а по какой нибудь из приведенных неаерняка просто есть решение на высоком уровне без копания в хексе ... All these links are related to reading and converting DDS image. https://github.com/Dahie/DDS-Utils http://www.javaworld.com/javaworld/j...43.html?page=1 http://www.omg.org/spec/DDS-Java/1.0/Beta2/ https://www.java2s.com/Open-Source/J...xture.java.htm http://code.google.com/p/java-dds/ http://nuicode.svnrepository.com/svn...Converter.java http://www.guyford.co.uk/showpage.ph..._Image_in_JOGL |
Время: 15:13. |
Время: 15:13.
© OSzone.net 2001-