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

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

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

Аватара для Tosyk

Старожил


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

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


всем привет,

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

 

Аватара для Tosyk

Старожил


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

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


извините, а как пользоваться?

edit: и ещё, я хотел вот так делать: перетаскиваю .MeshSet (это по сути тот же EBX) файл на исполняемый .bat и все нужные .chunk копируются в папку к исходному .MeshSet. такое можно с ним делать?

Последний раз редактировалось Tosyk, 27-06-2018 в 01:50.


Отправлено: 01:43, 27-06-2018 | #11



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

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


Ветеран


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

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


Цитата Tosyk:
извините, а как пользоваться? »
Сохранить в файл с расширением .ps1, поменяв пути на свои. Однократно разрешить исполнение локальных неподписанных скриптов PowerShell (about_Execution_Policies | Microsoft Docs, Set-ExecutionPolicy) командой:
Код: Выделить весь код
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Выполнить сохранённый скрипт командой наподобие:
Код: Выделить весь код
powershell.exe -file "C:\Мои проекты\0167\Untitled1.ps1"
Цитата Tosyk:
edit: и ещё, я хотел вот так делать: перетаскиваю .MeshSet (это по сути тот же EBX) файл на исполняемый .bat и все нужные .chunk копируются в папку к исходному .MeshSet. такое можно с ним делать? »
Думаю, можно. Но однократно разрешить «ручками» исполнение локальных неподписанных скриптов PowerShell всё же придётся. И укажите, где искать «все нужные .chunk» по отношению к «исходному .MeshSet» — так же, подняться от файла *.MeshSet на уровень вверх, а затем смотреть в каталог CHUNK? И ещё — не заморитесь перетаскивать по одному такое:
Цитата Tosyk:
сейчас у меня в папке CHUNK 32000 файлов »
количество *.MeshSet?

Отправлено: 02:31, 27-06-2018 | #12


Аватара для Tosyk

Старожил


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

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


*.MeshSet - это только один из форматов EBX файлов. у меня две папки CHUNKS и BUNDLES. про CHUNKS я уже рассказал, а в папке BUNDLES довольно конкретная и сложная структура файлов с правильными именами и своими расширениями. 60% всех файлов в BUNDLES это .ebx файлы, остальные это .MeshSet/.dxTexture/.iTexture и т.д. в большинстве своём это просто скрипты и линки на файлы из папки CHUNKS. Иногда попадаются другие типы .ebx файлов, полноценные, имеющие, например, внутри 3д геометрию, другие настройки физики.

мне не нужны все эти файлы, моя цель сейчас это выбрать нужные мне .MeshSet и перетягиванием на исполняемый скрипт получить копии файлов из папки CHUNKS. Если всё будет хорошо работать, возможно можно будет попробовать коллекционировать таким образом .chunk файлы для других типов как то .dxTexture/.iTexture и т.д.

Отправлено: 09:58, 27-06-2018 | #13


Ветеран


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

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


Tosyk, ещё раз: где искать соответствующие файлы *.chunk по отношению к файлу .MeshSet? Вот мы перетянули на скрипт файл .MeshSet, получили в скрипте полный путь к нему. Где искать файлы *.chunk относительно пути этого файла .MeshSet?

Отправлено: 19:41, 27-06-2018 | #14


Аватара для Tosyk

Старожил


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

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


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

Отправлено: 22:07, 27-06-2018 | #15


Ветеран


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

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


Цитата Tosyk:
файлы .chunk ищем по указанному адресу »
По какому? Вот, например, я перетащил на скрипт файл «C:\Мои проекты\table\img\bla-bla-bla.MeshSet». Где искать соответствующие файлы *.chunk?

Отправлено: 22:44, 27-06-2018 | #16


Аватара для Tosyk

Старожил


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

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


так нужно этот путь в скрипте указать

Отправлено: 23:53, 27-06-2018 | #17


Ветеран


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

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


Tosyk, указать в скрипте? Тогда в чём смысл перетаскивания файла на скрипт? Совершенно не понимаю.

Впрочем, как скажете. Можете задавать путь к файлам *.chunk тупо в скрипте (умолчанием второго аргумента).
C:\Мои проекты\0167\Sample.ps1
Код: Выделить весь код
param(
    [Parameter(Mandatory = $true)][System.String]$SourceFile, 
    [System.String]$sCHUNKFolder = 'C:\Мои проекты\0167\CHUNK'
)

$aByte4Find = [System.Byte[]](0xFF, 0xFF, 0xFF, 0xFF)

if(Test-Path -Path $SourceFile -PathType Leaf) {
    $oSourceFile = [System.IO.FileInfo]$SourceFile
    
    if(Test-Path -Path $sCHUNKFolder -PathType Container) {
        Write-Host "[$($oSourceFile.FullName)]" -ForegroundColor Yellow

        $aByteContent = [System.IO.File]::ReadAllBytes($oSourceFile.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"
                
                $sChunkFile = "$sCHUNKFolder\$sFoundFileName.chunk"

                if(Test-Path -Path $sChunkFile -PathType Leaf) {
                    Write-Host "`tFile    [$sChunkFile] found!" -ForegroundColor Green
                    Write-Host "`tCopy to [$($oSourceFile.DirectoryName)] as [$($oSourceFile.BaseName)_$($iCount.ToString("00")).chunk]." -ForegroundColor Green
                    $iCount++
                    [System.IO.File]::Copy($sChunkFile, "$($oSourceFile.DirectoryName)\$($oSourceFile.BaseName)_$($iCount.ToString("00")).chunk", $true)
                } else {
                    Write-Host "`tFile [$sChunkFile] not found!" -ForegroundColor Red
                }
                Write-Host ''
            }
        }
    } else {
        Write-Host "Can't find CHUNK folder [$sCHUNKFolder]." -ForegroundColor Red
    }
} else {
    Write-Host "Can't find source file [$SourceFile]." -ForegroundColor Red
}

C:\Мои проекты\0167\RunPowerShell.vbs
Код: Выделить весь код
Option Explicit

Dim i
Dim sArguments


sArguments = ""

For i = 0 To WScript.Arguments.Count - 1
	sArguments = sArguments & " """ & WScript.Arguments.Item(i) & """"
Next

WScript.CreateObject("WScript.Shell").Run """powershell.exe"" -File ""C:\Мои проекты\0167\Sample.ps1"" " & sArguments, 1, False

WScript.Quit 0

Поскольку умолчальным глаголом для .ps1 является отнюдь не «Выполнить с помощью PowerShell» (и что я менять, в общем-то, не советую), то используем промежуточный скрипт WSH, на который и надо перетаскивать файл .MeshSet. Не забудьте поправить все пути в скриптах и сами имена скриптов на свои.
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:25, 28-06-2018 | #18


Аватара для Tosyk

Старожил


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

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


т.е. скрипт RunPowerShell.vbs использует скрипт Sample.ps1 и перетаскивать исходный файл нужно именно на RunPowerShell.vbs?

Отправлено: 12:58, 28-06-2018 | #19


Ветеран


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

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


Tosyk, да.

Отправлено: 18:33, 28-06-2018 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход