|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - копирование файлов по hash-имени из HEX исходного файла |
|
CMD/BAT - копирование файлов по hash-имени из HEX исходного файла
|
Старожил Сообщения: 166 |
всем привет,
1. имеется папка с кучей файлов. у файлов вместо имени hash-абракадабра типа: 000ec4d858ebbaa80621fc19a608599f.chunk или aa8d9cd800e0c17bc5b03d488ab17572.chunk 2. имеется набор файлов с расширением EBX (и нормальными именами), в хексе которых эти hash-имена. задача вот такая вот: кидаем EBX на BAT файл и соответствующие файлы .chunk копируются к исходному EBX и, было бы круто, эти скопированные .chunk файлы переименовывать в имя EBX с числовым индексом. подскажите как такое реализовать. p.s.: обнаружил, что после каждого hash-имени внутри EBX идёт hex-значение: FFFFFFFF |
|
Отправлено: 21:24, 26-06-2018 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 22:03, 26-06-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 166
|
Профиль | Отправить PM | Цитировать прошу прощения, у меня голова садовая
вот примеры: https://drive.google.com/file/d/16r6...ew?usp=sharing возможно, когда вы посмотрите на них у вас не останется вопросов |
Отправлено: 22:21, 26-06-2018 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Tosyk:
|
|
Отправлено: 22:33, 26-06-2018 | #4 |
Старожил Сообщения: 166
|
Профиль | Отправить PM | Цитировать если вы откроете любой из двух файлов .MeshSet из папки EBX моего примера в HEX редакторе то там перед каждым значением FFFFFFFF будет 32-ух значное имя файла из папки CHUNK моего же примера.
нужно просканировать .MeshSet выявить список всех таких имён и скопировать файлы с соответствующими именами из папки CHUNK в то место где лежит исходный .MeshSet например для файла head_cole_mp_mesh 90110000000000001001000070009400.MeshSet список таких имён будет таким: 305B5D766DEEDE8081AF49D0A42426CF 88AA965A017628C5D9180DBE0A938819 65FEA349ABF38F538453CEBDA3242277 479EAF685E58B752F331F73A4A28586F |
|
Отправлено: 22:46, 26-06-2018 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 23:10, 26-06-2018 | #6 |
Старожил Сообщения: 166
|
Профиль | Отправить PM | Цитировать вообще это я сам придумал. если есть какая-то возможность понять где в этом файле (в данном случае .MeshSet) будут эти 32-ух значные имена НЕ ориентируясь на FFFFFFFF то это было бы просто отлично
edit: сейчас у меня в папке CHUNK 32000 файлов |
Отправлено: 23:14, 26-06-2018 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Tosyk, хорошо бы. Но для этого нужно знать или иметь описание внутреннего формата этих файлов. Что это вообще такое?
|
Отправлено: 23:22, 26-06-2018 | #8 |
Старожил Сообщения: 166
|
Профиль | Отправить PM | Цитировать ebx - это общий игровой формат движка frostbite. довольно разносторонний. там может всё что угодно содержаться, но что меня интересует так это только линки на эти 32-ух значные имена.
вот что то похожее на описание: https://pastebin.com/rGpBFwAV в аттаче я прикрепил подобный файлу .MeshSet файл для линка к текстуре. из него можно узнать имя 4D42EF837BFB4F9CBD9E664F7959E7A3 и это ещё один файл из папки CHUNK только это уже будет текстура. |
Отправлено: 23:41, 26-06-2018 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Tosyk, ну, вот, попробуйте в первом приближении (на PowerShell):
Скрытый текст
$sRootFolder = 'C:\Мои проекты\0167' $sEBXSubFolder = Join-Path -Path $sRootFolder -ChildPath 'EBX' $sCHUNKSubFolder = Join-Path -Path $sRootFolder -ChildPath 'CHUNK' $aByte4Find = [System.Byte[]](0xFF, 0xFF, 0xFF, 0xFF) if(Test-Path -Path $sRootFolder -PathType Container) { if(Test-Path -Path $sEBXSubFolder -PathType Container) { if(Test-Path -Path $sCHUNKSubFolder -PathType Container) { Get-ChildItem -Path "$sEBXSubFolder\*.MeshSet" | ForEach-Object -Process { Write-Host "[$($_.FullName)]" -ForegroundColor Yellow $aByteContent = [System.IO.File]::ReadAllBytes($_.FullName) $iCount = 0 for($i = 0; $i -le $aByteContent.Length - $aByte4Find.Length - 1; $i++) { $bFound = $true for($j = 0; $j -le $aByte4Find.Length - 1; $j++) { if($aByteContent[$i + $j] -ne $aByte4Find[$j]) { $bFound = $false break } } if($bFound) { $sFoundFileName = [System.BitConverter]::ToString($aByteContent[$($i - 16) .. $($i - 1)]) -replace '-', '' Write-Host "`tOffset: $i" Write-Host "`tFound file name: $sFoundFileName" if(Test-Path -Path "$sCHUNKSubFolder\$sFoundFileName.chunk" -PathType Leaf) { Write-Host "`tFile exists!" -ForegroundColor Green $iCount++ [System.IO.File]::Copy("$sCHUNKSubFolder\$sFoundFileName.chunk", "$($_.DirectoryName)\$($_.BaseName)_$($iCount.ToString("00")).chunk", $true) } else { Write-Host "`tFile not exists!" -ForegroundColor Red } Write-Host '' } } Write-Host '' } } else { Write-Host "Can't find CHUNK subfolder [$sCHUNKSubFolder]." -ForegroundColor Red } } else { Write-Host "Can't find EBX subfolder [$sEBXSubFolder]." -ForegroundColor Red } } else { Write-Host "Can't find root folder [$sRootFolder]." -ForegroundColor Red } У меня вышли такие результаты
![]() ![]() |
Отправлено: 00:58, 27-06-2018 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Копирование файлов по списку из файла | foma24 | Скриптовые языки администрирования Windows | 2 | 30-12-2022 15:35 | |
CMD/BAT - [решено] Копирование всех файлов по сети с указанием имени пользователя | Elven | Скриптовые языки администрирования Windows | 1 | 10-04-2014 17:41 | |
CMD/BAT - копирование выбранного файла в определенное место и добавление к имени файла даты | x800 | Скриптовые языки администрирования Windows | 0 | 19-02-2014 20:39 | |
CMD/BAT - перемещение файлов в каталог созданный из части имени файла | surrender1 | Скриптовые языки администрирования Windows | 9 | 10-10-2013 14:42 | |
CMD/BAT - [решено] Копирование имени файла и определённой строки из него в другой файл | Liquid Ocelot | Скриптовые языки администрирования Windows | 10 | 05-07-2013 09:35 |
|