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

Компьютерный форум 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 | Цитировать


Отлично, всё работает! А как заставить его:

1 - находить *. sdd файлы вглубь по каталогам и преобразовывать
2 - конвертировать файл при перетаскивании его на *.bat файл, конвертировать только этот файл, даже если в этом каталоге присутствуют другие

для первого это может быть вот так?:
Код: Выделить весь код
@echo off
SETLOCAL EnableDelayedExpansion

(for /F "Tokens=*" %%a In ('Dir /B /S "*. 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"
)))
а вот по второму пункту я даже незнаю что можно сделать.

Отправлено: 13:53, 08-12-2010 | #21



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

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


Googler


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

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


1. да вроде он итак должен искать в подкаталогах - см. "HELP FOR" для ключа /R:
Цитата:
FOR /R [[диск:]путь] %переменная IN (набор) DO команда [параметры]

Выполнение команды для каталога [диск:]путь, а также для всех
подкаталогов этого пути
. Если после ключа /R не указано имя каталога,
выполнение команды начинается с текущего каталога.
Если вместо набора указана только точка (.), команда выводит список
всех подкаталогов.

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


Аватара для Tosyk

Старожил


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

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


Понятно, а как по второму пункту:

Цитата Tosyk:
2 - конвертировать файл при перетаскивании его на *.bat файл, конвертировать только этот файл, даже если в этом каталоге присутствуют другие »
?

ДОБАВКА:
возможно ли сделать конвертирование из мастер файла, т.е. не создавать для каждого типа свой файл *.new и *.old?

ДОБАВКА2:
Мне кажется нужно воспользоваться вашим предложением
Цитата amel27:
если определить интервалы размеров для каждого типа, то можно и по размеру »
потому что пар (*.new/*.old) уже набралось около 30, а размеры типов вариируются +/- 1 байт.

Если сделать подстановку по диапазону размеров, то как будет скрипт выглядеть?

ДОБАВКА3:
А вы знаете каконибудь компилятор bat/cmd что при его выполнении не мелькало окошко cmd (что происходит в большинстве таких программ), а чтобы появлялось окошко с заполняющейся полоской, как при инсталяции?

Последний раз редактировалось Tosyk, 09-12-2010 в 06:59.


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


Googler


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

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


Цитата Tosyk:
а как по второму пункту »
решается без проблем разбором параметров командной строки батника

Цитата Tosyk:
пар (*.new/*.old) уже набралось около 30, а размеры типов вариируются +/- 1 байт.
Если сделать подстановку по диапазону размеров, то как будет скрипт выглядеть? »
смысла большого не вижу - короче не будет, но будет запутанней сам алгоритм: сэкономим только на OLD-шаблонах (вместо них будет некое значение интервала), а правильное значение блока всё равно придется брать из NEW-шаблонов, кроме того встанет проблема соответствия между числом-интервалом и файлом NEW-шаблона

Цитата Tosyk:
возможно ли сделать конвертирование из мастер файла, т.е. не создавать для каждого типа свой файл *.new и *.old? »
не совсем понял вопрос, всё равно перед сравнением придется выдергивать нужный блок из этого файла, а это дополнительные затраты на код и его выполнение... единственный достойный внимания вариант - хранить блоки в переменных самого батника (само собой, в HEX-виде), но для этого нужен достаточно мощный командный HEX-процессор (типа SFK), который мог бы считывать/записывать файловые блоки HEX <--> BIN, тогда блок данных батника мог бы быть таким (для одного типа):
Код: Выделить весь код
set DXT5_2048x2048_OLD=205344440000007C000A1007000008000000080000400000000000000000000C
set DXT5_2048x2048_NEW=444453207C000000071008000008000000080000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000040000004458543500000000000000000000000000000000000000000010000000000000000000000000000000000000
P.S. здесь я предположил, что для идентификации типа файла достаточно первых 32 байт заголовка

Цитата Tosyk:
А вы знаете каконибудь компилятор bat/cmd что при его выполнении не мелькало окошко cmd »
извиняюсь, но не совсем понимаю, когда сначала выбирают консольный вариант исполнения задачи, а потом стараются стыдливо прятать его за оконный интерфейс... или ещё хлеще - насмотревшись вдоволь на унылый прогресс-бар, пытаются воспроизвести аналог консольного окошка, в которое тупо копипастят вывод скрытого CMD-окна

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


Аватара для Tosyk

Старожил


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

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


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

Отправлено: 17:32, 09-12-2010 | #25


Googler


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

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


Tosyk, мы уже обсудили три возможных подхода:

- на базе DD, библиотека шаблонов состоит из пар OLD/NEW файлов-заголовков;
- на базе DD, библиотека шаблонов состоит из пар: NEW-заголовок-файл + размер OLD-файла;
- на базе SFK, библиотека шаблонов состоит из пар HEX-переменных, описывающих NEW/OLD заголовки

- определитесь с выбором,
- сформируйте соответствующую библиотеку шаблонов (3-5 типов),
- создайте тестовую структуру каталогов (хотя бы по 1 файлу каждого типа),
- запакуйте и выложите в студию

только в этом случае имеет смысл двигаться дальше и ваять готовый код

Цитата Tosyk:
с ним удобнее управляться, и он более гибкий, как инструмент. А спрашиваю о преобразовании в оконный интерфейс потому, что делаю этот скрипт не для себя, а в основном для людей. »
дело вкуса... но для GUI я бы выбрал что-нибудь типа HTA/AutoIT/AHK, а из них при желании можно задействовать все возможности CMD

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


Аватара для Tosyk

Старожил


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

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


Прошу прощения за задержку.

Выкладываю архив с библитекой шаблонов и тестовой структурой файлов.

скачать тут

Как я уже упомянал выше: можно ли использовать информацию о размере файлов для определения типа?

вот что я исследовал:
Код: Выделить весь код
4 kb - DXT1 64x64
12 kb - DXT1 128x128
44 kb - DXT1 256x256
171 kb - DXT1 512x512
172 kb - DXT1 512x512
342 kb - DXT5 512x512
683 kb - DXT1 1024x1024
684 kb - DXT1 1024x1024
1366 kb - DXT1 2048x1024
2732 kb - DXT1 2048x2048
если проводить изменение по заголовку то велика вероятность того, что я должен буду проверить HEX'ом все файлы или почти все (повторю, что их около 10000) на предмет различия в заголовках, чтобы не пропустить какой-то тип. А при этом сама суть задумки автоматизации пропадёт.

Если ту же операцию можно повторить с помощью SFK, но только кодом, то это предпочтительнее.

Посмотрел программы HTA/AutoIT/AHK, и что то не совсем понимаю, как с помощью них сделать простой прогресс-бар (

Последний раз редактировалось Tosyk, 14-12-2010 в 16:03.


Отправлено: 15:36, 14-12-2010 | #27


Аватара для Tosyk

Старожил


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

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


Приветствую, прошу прощения за дабл-пост.

Уважаемый товарищ amel27, не хотелось бы останавливаться на пол пути.

Отправлено: 03:41, 31-12-2010 | #28


Ветеран


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

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


Подскажите способ, как заменить в autorun.dll все совпадения "sources\setup.exe" на "sources\set86.exe" и(или) "Sources\setep.exe" на "Sources\set86.exe", с сохранением в новый файл.

Последний раз редактировалось sov44, 05-04-2023 в 08:28.


Отправлено: 23:04, 21-10-2020 | #29


Забанен


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

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


sov44, про bsdiff\bspacth что-нибудь знаете? bspacth, к слову, в инсталляторе JRE используется даже.

Отправлено: 23:39, 22-10-2020 | #30



Компьютерный форум 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




 
Переход