Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - автоматический поиск и замена HEX в файлах

Ответить
Настройки темы
CMD/BAT - автоматический поиск и замена HEX в файлах

Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Tosyk
Дата: 06-12-2010
Описание: испраил второй пункт
Возможно ли такое сделать с помощью cmd? Нужно автоматически поправить HEX большого количества файлов с последующим переименованием.

И вот ещё: как сделать так чтобы такой скрипт работал:

1 - при перетаскивании на него одного/группы файлов
2 - при запуске производился поиск и обработка файлов вглубь по каталогам.

p.s.: иногда нужно не заменить hex, а добавить его в определённое место в файле.

Отправлено: 21:51, 05-12-2010

 

Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


Так, значит получается скрипт ищет блок в файле DXT5_2048x2048.dds и подставляет в то же место в файл mcc001n2b. SDD. Это работает!

Но при этом получается? что нужен файл DXT5_2048x2048.dds, который вечит 4 мб, хотя думаю можно удалить всё, что не нужно в HEX'e этого файла (думаю при этом будет весить не больше трёх килобайт).

А как осуществить поиск определённого блока и замену этого блока на новый по маске, допустим *. SDD?

Отправлено: 08:29, 07-12-2010 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Tosyk:
Так, значит получается скрипт ищет блок в файле DXT5_2048x2048.dds и подставляет в то же место в файл mcc001n2b. SDD. Это работает! »
он ничего не ищет - просто берет блок заданного размера (128 байт) из заданной позиции (=0) в заданном файле (mcc001n2b. SDD) и копирует его в заданную позицию (=0) другого файла (DXT5_2048x2048.dds)

Цитата Tosyk:
Но при этом получается? что нужен файл DXT5_2048x2048.dds, который вечит 4 мб »
размер самого файла не имеет значения

Цитата Tosyk:
как осуществить поиск определённого блока »
что ищем-то?... прежде чем писать скрипт, нужно четко представлять алгоритм работы (без скрипта), а вот этого я никак не могу понять.... очевидно, двух файлов для примера маловато

Отправлено: 08:46, 07-12-2010 | #12


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


Так, постараюсь объяснить исходя из того, что я от вас уже узнал.

Дано: 1000 файлов с расширением *. SDD

700 файлов с заданной позиции (=0) имеют блок заданного размера (128 байт) 1-ого типа (DXT5)
200 файлов с заданной позиции (=0) имеют блок заданного размера (128 байт) 2-ого типа (DXT1)
100 файлов с заданной позиции (=0) имеют блок заданного размера (128 байт) 3-ого типа (DXT1a)

типы равны по размеру блока, но отличаются содержанием этого блока

Задача:

1 - в каждом файле с расширением *. SDD заменить блок заданного размера (128 байт) на новый тип
2 - переименовать расширение *. SDD в *.dds

Отправлено: 09:36, 07-12-2010 | #13


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Tosyk, 700+200+100=1000, т.е. каждому SDD-файлу соответствует какой-то один блок из 3-х, допустим эти блоки находятся в файлах DXT5.BIN, DXT1.BIN, DXT1a.BIN, которые находятся в том же каталоге, где батник... осталось решить какой из этих трёх блоков выбрать для конкретного SDD-файла?... или это не имеет значения, т.е. по порядку - первые 700 -> DXT5.BIN, следующие 200 -> DXT1.BIN и т.д.?.. и какова примерно структура каталога с SDD-файлами?

Отправлено: 11:20, 07-12-2010 | #14


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата amel27:
Tosyk, 700+200+100=1000, т.е. каждому SDD-файлу соответствует какой-то один блок из 3-х, допустим эти блоки находятся в файлах DXT5.BIN, DXT1.BIN, DXT1a.BIN, которые находятся в том же каталоге, где батник... осталось решить какой из этих трёх блоков выбрать для конкретного SDD-файла?... или это не имеет значения, т.е. по порядку - первые 700 -> DXT5.BIN, следующие 200 -> DXT1.BIN и т.д.? »
Да, вы всё правильно поняли. Структура каталогов может быть различная.

Цитата amel27:
осталось решить какой из этих трёх блоков выбрать для конкретного SDD-файла »
Расскажу немного о *. SDD файлах. Это текстуры использующие стандарт сжатия DXT, только с изменённым заголовком. Из-за изменённого заголовка они как раз и не открываются и не просматриваются. Поэтому нужно это заголовок заменить на правильный!

Цитата amel27:
структура каталога с SDD-файлами »
в каталогах могут быть такие типы (о типах упоминал выше, для примера тогда назвал 3):

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).

Отправлено: 11:39, 07-12-2010 | #15


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Tosyk:
в каталогах могут быть такие типы (о типах упоминал выше, для примера тогда назвал 3)»
значит для каждого типа нужно будет "приготовить" свой файл-шаблон (размером 128 байт) с нужным содержимым и узнаваемым именем типа "DXT1_1024x1024.BIN", но один вопрос так и остался нерешенным: допустим, мы перебираем все SDD файлы в папке по очереди (в произвольном порядке), берем очередной SDD-файл, как определить, какой BIN-файл из "библиотеки шаблонов" ему соответствует?.. по имени SDD-файла?... размеру или еще как?.. полагаю, шаблон должен соответствовать размеру текстуры, но как установить это соответствие?.. как вы это определяете при ручной замене?

Отправлено: 12:07, 07-12-2010 | #16


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата amel27:
как вы это определяете при ручной замене? »
Я определяю только на глаз по размеру файла в мегабайтах. Примерно знаю сколько какой тип должен "весить" и подставляю ему "правильный" блок.

Вот я и говорил об этом в моём посте чуть выше
Цитата Tosyk:
а как заменить не начало (либо конец), а именно определённые значения?»
Обратите внимание на картинку которую я прикреплял. Там в первом файле (верхний, тот, который нужно исправить):
Код: Выделить весь код
 SDD...|...@...5TXD...@...
нужно заменить на
Код: Выделить весь код
DDS   |...@...DXT5...
Так вот, можно ли искать конкретно эти самые значения? Допустим в определённых байтах ищем

SDD, затем ..@.., затем 5TXD, затем ...@...

и если сочетание всех этих значение найдено, то приравниваем этот файл к типу DXT5 2048x1024 (в данном случае) и заменяем его первые 128 байт на новые.

Отправлено: 12:27, 07-12-2010 | #17


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Tosyk:
Так вот, можно ли искать конкретно эти самые значения? Допустим в определённых байтах ищем »
если все "неправильные" (старые) заголовки можно отфиксировать в файлах аналогично правильным (новым), типа: "DXT1_1024x1024.OLD"/"DXT1_1024x1024.NEW", то для каждого обрабатываемого SDD алгоритм может быть следующий:

- считываем заголовок во временный файл;
- ищем точно такой же файл в библиотеке "неверных шаблонов";
- если файл найден, берем новый шаблон с таким же именем;
- восстанавливаем новый заголовок

только надо определиться с положением/размером блока, однозначно идентифицирующего тип "неверного" шаблона и "построить" библиотеку пар шаблонов старый/новый

Цитата Tosyk:
Я определяю только на глаз по размеру файла в мегабайтах. Примерно знаю сколько какой тип должен "весить" и подставляю ему "правильный" блок. »
если определить интервалы размеров для каждого типа, то можно и по размеру

Отправлено: 05:47, 08-12-2010 | #18


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата amel27:
- считываем заголовок во временный файл;
- ищем точно такой же файл в библиотеке "неверных шаблонов";
- если файл найден, берем новый шаблон с таким же именем;
- восстанавливаем новый заголовок »
Всё вроде так и есть. Подскажите пример как это сделать кодом. В общем я себе это представляю, а вот что конкретно писать не знаю.

Отправлено: 06:45, 08-12-2010 | #19


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Tosyk:
Подскажите пример как это сделать кодом. »
сначала, для каждого типа заголовка нужно создать пару файлов
Цитата:
DXT1_1024x1024.OLD
DXT1_1024x1024.NEW

DXT1_1024x512.OLD
DXT1_1024x512.NEW

DXT1_256x256.OLD
DXT1_256x256.NEW

DXT1_512x512.OLD
DXT1_512x512.NEW
...
это можно сделать НЕХ-редактором, либо на файле с нужным заголовком отработать команду типа:
Код: Выделить весь код
dd bs=1c count=128 if="mcc001n2b.sdd" of="DXT5_2048x2048.old"
допустим, все *.OLD/*.NEW шаблоны лежат в каталоге с батником, а SDD-файлы в папке C:\TEST,
тогда батник по обработке может быть таким:
Код: Выделить весь код
@echo off
SETLOCAL EnableDelayedExpansion

(for /r "C:\TEST" %%a in (*.sdd) do (
  dd bs=1c count=128 if="%%a" of="%~n0.tmp"2>nul
  set "$b="&for %%b in (*.old) do if not defined $b fc /b "%~n0.tmp" "%%b" >nul&& set "$b=%%~nb"
  if defined $b if not exist "!$b!.new" (echo File "!$b!.new" not found^^!) else (
    dd bs=1c count=128 if="!$b!.new" of="%%a"2>nul
    ren "%%a" "%%~na.dds"
)))

Отправлено: 12:14, 08-12-2010 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - автоматический поиск и замена HEX в файлах

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Сравнение и замена в файлах .txt Deep2007 Скриптовые языки администрирования Windows 4 19-11-2010 19:08
Autoit работа в hex поиск offset'а aktivizion AutoIt 3 14-03-2010 21:29
C/C++ - Поиск текста в файлах student_po Программирование и базы данных 6 04-09-2009 23:33
Замена одной фразы в разных файлах Punsher Программное обеспечение Linux и FreeBSD 3 11-03-2008 13:24
Пакетная замена в html-файлах y3ep Программное обеспечение Windows 7 11-06-2004 08:06




 
Переход